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:
Sources and any needed build materials to create a msdscript
command-line program and a library. The library form should basically the same sources as msdscript
, but without main()
, so it can be linked into a larger application. (Don’t include any compiled files in your archive. You should provide sources so that someone could build on a different kind of machine than yours.)
Documentation, including build instructions, a manual for command-line msdscript
, a specification of the MSDscript language, and API information for using your MSDscript implementation as a library within a larger application.
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.