% CSci 658-01: Software Language Engineering \
  Spring 2018 Assignment \#4 (Final Project)
% **H. Conrad Cunningham**
% **4 May 2018**
 

## Revised Deadline Saturday, 5 May, 11:59 p.m. 

Original deadline was Friday, 4 May, 11:59 p.m.

## General Instructions

All homework and programming exercises must be prepared in accordance
with the instructions given in the
[Syllabus ](<../658syl_sp18.html>). Each assignment must be submitted
to your instructor by its stated deadline.

## Assignment \#4 (Final Project) Description

This is the final project. It is an individual assignment.

This assignment requires you to design a domain-specific language
(DSL) using the techniques we have discussed this semester. 

Complete the following steps:

1.  Choose an interesting problem -- perhaps one related to your
    research or other professional interests. Do not choose a problem
    that you have solved for a previous assignment in this class, that
    the instructor provided you as a case study, etc. Discuss your
    idea with the instructor if you have any questions.

    You may choose to implement a DSL for the adventure game problem
    we are discussing in class, but please discuss that with your
    instructor before doing so.
	
#.   Write a careful description of your problem using appropriate
     techniques (e.g. using one or more paragrams, user stories, etc).
	
#.   Analyze your problem using appropriate techniques (e.g. using SCV
     analysis, domain analysis, object-oriented analysis/design, etc).

#.  Choose to design *either an external or an internal DSL* (or
    perhaps some combination).

#.  Describe the syntax and semantics of your DSL precisely.
	 
#.  Implement the DSL in an appropriate manner (e.g. using DSL
    patterns and other techniques we discussed, using other
    techniques arising from your own investigation, etc).
	 
    Normally you will want to separate the parsing from the semantic
    model and interpretation or code generation as we have done in
    the DSL case studies. 
	 
    You may use whatever language or library you wish, but be sure
    that your instructor can your DSL implementation to evaluate your
    work.
	 
    Be sure to document your program appropriately (with internal
    comments, external documents, diagrams, etc).  Also document what
    resources you used in constructing your solution.
	 
#.  Test your DSL implementation thoroughly.

#.  Submit the following to Blackboard by the due date:

    a.  Description of your problem
	 
    #.  Description of the syntax and semantics of your internal or
        external DSL
	 
    #.  Implementation of your DSL (e.g. programs, scripts, data
        filed, etc.)
	 
    #.  Testing infrastructure for your implementation
 
    #.  Documentation of your implementation (as internal program
        comments or separate documents)

Remember that the instructor prefers to compile and execute your
solutions on his MacOS systems. Make it easy for him by identifying
what software is needed.

