Some applications include scripting facilities, even when the application is primarily intended for non-programmers. Excel is one example, where users can write formulas in cells, and the formulas can use a non-trivial language. JavaScript started in a similar category, as a language to add a little computation to web pages, before it turned into a fully formed language.

Although MSDscript is not a very rich language at the moment—it doesn't even have subtraction—it's not far from the the kinds of languages that are embedded in applications. For example, someone implementing a calendar program might want to have a language for advanced users to calculate dates for repeated meetings (say, more sophisticated than “every Tuesday”), and MSDscript could just about work for that.

Your task in this assignment is to package and document your MSDscript implementation in source form so that another programmer could build it, run msdscript directly, or embed it in their application. This time around, you will hand in a .zip or .tgz archive on Canvas. (Software is also often just made available on GitHub, but this assignment specifically requires an archive.) The archive should include the following:

Your description of the MSDscript language should be sufficient for someone who has never heard of MSDscript to write programs or look at an MSDscript program and predict its result. It will not be enough to say that _fun or _let exists, for example; you will need to explain what those forms mean, including how they bind variables. This “user manual” part of your document should not talk about any of the internal classes used to implement MSDscript, but it should describe the grammar of MSDscript (because knowing the grammar is necessary for just using msdscript directly).

The documentation on embedding your MSDscript implementation will need to talk about C++ functions or classes. Exactly how much of the implementation to expose as the public API is up to you, but it should be enough to support the hypothetical use in a calendar application. A relatively ambitious API would allow clients to add their own primitive operations and values. You can assume that the application programmer is using macOS, but it would be good practice to trying packaging your code to work on at least macOS and Linux.

As an example of how someone might want to link your MSDscript implementation into a program, see which_day.cpp .

For guidance on writing documentation, see Documenting and Packaging Software .

For this assignment, you do not need to track down documentation tools or worry about hyperlinking.

You submission for this assignment is a first draft. You'll receive feedback on your packaging and documentation, and you’ll supply a revised version as another assignment.