The default application domain consists of multiple-choice examinations. An exam has a title, instructions, and a sequence of questions. Each question consists of a sequence of possible answers to the question, with one or more of them being the "correct" answer(s).
The set of assignments defined below has the end goal of defining and implementing a DSL for describing these multiple-choice exams in such a way that several back-end tools can work from the description (e.g., various tools to present the exam to the students and collect the student answers).
This is an individual assignment. Each student is expected to do his or her own work.
You may refer to materials in books or on the web, but you must document the materials that you use and report them in the materials you submit.
For each assignment, turn in electronic copies of the specified documents and files using Blackboard.
Select either the default application domain described above or one that you define yourself and get approval from your instructor to use. (To get approval for a different application domain, write a short description of your domain and give that description to you instructor.)
Design an appropriate DSL for the selected application domain. This may be either an external DSL or an internal DSL in an appropriate language.
Specify the syntax and semantics of the DSL clearly and rigorously in a manner appropriate to the type of DSL. Also give example "programs" written in the DSL.
Design and implement a semantic model (or virtual machine or abstract syntax tree) for the application domain you selected above. You should implement this semantic model in Scala, Java, Ruby, or Groovy. However, if a different language is appropriate, you may ask your instructor for permission to use that language.
Also design and implement a "parser" (i.e., front-end or first pass) for your DSL that takes a DSL program and populates the semantic model appropriately. If necessary, you may change the DSL design given for the previous assignment, but you must describe and justify those changes.
Submit the appropriate documented and formatted source code, appropriate test drivers, and any needed external documentation. Be sure to provide information on how the instructor needs to build your programs and use them to process DSL programs. If you made changes to the DSL design from the previous assignment, update your design documents and resubmit them.
Design and implement at least one tool to "execute" the semantic model you built above. This may be an interpreter that directly executes the model or a code generator. In the case of the default application domain, execution may mean presentation of the exam to the students for them to take. You may change the DSL, parser, and semantic model you submitted in previous assignments, but you must describe and justify the changes.
Submit the appropriate documented and formatted source code, appropriate test drivers, and any needed external documentation. Be sure to provide information on how the instructor needs to build your programs and use them to process DSL programs. If you change any of the elements of the previous assignments, update the appropriate documents and source code and resubmit these to the instructor.
UP to Engr 691 Assignments page?