\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 \#4 (Final Project)},
            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 \#4 (Final Project)}
\author{\textbf{H. Conrad Cunningham}}
\date{\textbf{4 May 2018}}

\begin{document}
\maketitle

\hypertarget{revised-deadline-saturday-5-may-1159-p.m.}{%
\subsection{Revised Deadline Saturday, 5 May, 11:59
p.m.}\label{revised-deadline-saturday-5-may-1159-p.m.}}

Original deadline was Friday, 4 May, 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-4-final-project-description}{%
\subsection{Assignment \#4 (Final Project)
Description}\label{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:

\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
  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.
\item
  Write a careful description of your problem using appropriate
  techniques (e.g.~using one or more paragrams, user stories, etc).
\item
  Analyze your problem using appropriate techniques (e.g.~using SCV
  analysis, domain analysis, object-oriented analysis/design, etc).
\item
  Choose to design \emph{either an external or an internal DSL} (or
  perhaps some combination).
\item
  Describe the syntax and semantics of your DSL precisely.
\item
  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.
\item
  Test your DSL implementation thoroughly.
\item
  Submit the following to Blackboard by the due date:

  \begin{enumerate}
  \def\labelenumii{\alph{enumii}.}
  \item
    Description of your problem
  \item
    Description of the syntax and semantics of your internal or external
    DSL
  \item
    Implementation of your DSL (e.g.~programs, scripts, data filed,
    etc.)
  \item
    Testing infrastructure for your implementation
  \item
    Documentation of your implementation (as internal program comments
    or separate documents)
  \end{enumerate}
\end{enumerate}

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.

\end{document}
