\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
\PassOptionsToPackage{hyphens}{url}
%
\documentclass[]{article}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{textcomp} % provides euro and other symbols
\else % if luatex or xelatex
  \usepackage{unicode-math}
  \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\fi
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
% use microtype if available
\IfFileExists{microtype.sty}{%
\usepackage[]{microtype}
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
}{}
\IfFileExists{parskip.sty}{%
\usepackage{parskip}
}{% else
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt plus 2pt minus 1pt}
}
\usepackage{hyperref}
\hypersetup{
            pdftitle={CSci 658-01: Software Language Engineering Spring 2018 Assignment \#1},
            pdfauthor={H. Conrad Cunningham},
            pdfborder={0 0 0},
            breaklinks=true}
\urlstyle{same}  % don't use monospace font for urls
\setlength{\emergencystretch}{3em}  % prevent overfull lines
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{0}
% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
\let\oldparagraph\paragraph
\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
\let\oldsubparagraph\subparagraph
\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi

% set default figure placement to htbp
\makeatletter
\def\fps@figure{htbp}
\makeatother

\usepackage{caption}
\DeclareCaptionLabelFormat{nolabel}{}
\captionsetup{labelformat=nolabel}

\title{CSci 658-01: Software Language Engineering\\
Spring 2018 Assignment \#1}
\author{\textbf{H. Conrad Cunningham}}
\date{\textbf{23 February 2018}}

\begin{document}
\maketitle

\hypertarget{revised-deadline-wednesday-28-february-2018-1159-p.m.}{%
\subsection{Revised Deadline Wednesday, 28 February, 2018, 11:59
p.m.}\label{revised-deadline-wednesday-28-february-2018-1159-p.m.}}

Original Deadline Monday, 26 February, 2018, 11:59 p.m.

\hypertarget{general-instructions}{%
\subsection{General Instructions}\label{general-instructions}}

All homework and programming exercises must be prepared in accordance
with the instructions given in the \href{../658syl_sp18.html}{Syllabus}.
Each assignment must be submitted to your instructor by its stated
deadline.

\hypertarget{assignment-1-description}{%
\subsection{Assignment \#1 Description}\label{assignment-1-description}}

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
  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
  \texttt{StateMachine.scala}, \texttt{StateMachineTest.scala},
  \texttt{CommandChannel.scala}, and \texttt{StateMachineDirect.sh}.

  You will be expected to use your semantic model implementation in
  Assignment \#2 (a DSL parser).
\item
  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!
\item
  This is an individual assignment. Be sure to document what resources
  you used in constructing your solution.
\item
  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.
\item
  \textbf{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
  \emph{external} DSL (instead of an internal DSL as the Lair article
  describes).
\end{enumerate}

\end{document}
