% CSci 658-01: Software Language Engineering \
  Spring 2018 Assignment \#1
% **H. Conrad Cunningham**
% **23 February 2018**

## Revised Deadline Wednesday, 28 February, 2018, 11:59 p.m. 

Original Deadline Monday, 26 February, 2018, 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 \#1 Description

1.  Use an approved language (see below), redesign and implement a
    semantic model and direct execution mechanism as described in
    Fowler's State Machine DSL (Secret Panel) case study.
	
	This should include appropriate replacements for Fowler's
    descriptions in his DSL book and for the instructor's files
    `StateMachine.scala`, `StateMachineTest.scala`,
    `CommandChannel.scala`, and `StateMachineDirect.sh`.

    You will be expected to use your semantic model implementation in
    Assignment \#2 (a DSL parser).

#.  When complete, submit your source code, test input, test program,
    etc. files to the course Blackboard site.
	
	Be sure to give instructions on how to build your program from the
    source.
	
	Remember that the instructor prefers to compile and execute your
    solution on his MacOS systems. Make it easy for him!


#.  This is an individual assignment. Be sure to document what
    resources you used in constructing your solution.


#.  Do not use Java or Scala because there are readily available
    solutions in the course materials. You may use Python (preferably
    Python 3) or any other interesting language.  Talk to your
    instructor if you have questions about the language choice.


#.  **Alternative**: If you have developed a similar state machine
    model previously, you may instead develop a semantic model for
    Fowler's Lair Configuration DSL. If you do, you must use a
    language other than Ruby or Lua, and, for Assignment \#2, you must
    develop an *external* DSL (instead of an internal DSL as the Lair
    article describes).
