29 Design a grammar for the WHILE language and give the grammar |
29 Design a grammar for the WHILE language and give the grammar |
30 rules. The main categories of non-terminals should be: |
30 rules. The main categories of non-terminals should be: |
31 |
31 |
32 \begin{itemize} |
32 \begin{itemize} |
33 \item arithmetic expressions (with the operations from the |
33 \item arithmetic expressions (with the operations from the |
34 previous coursework, such as \pcode{+}, \pcode{*} and so on) |
34 previous coursework, that is \pcode{+}, \pcode{-}, \pcode{*}, |
35 \item boolean expressions (such as \pcode{<}, \code{!=} and |
35 \pcode{/} and \pcode{\%}) |
36 so on) |
36 \item boolean expressions (with the operations \pcode{==}, \pcode{<}, \pcode{>}, |
37 \item single statements (such as \pcode{skip}, assignments, \pcode{if}s, |
37 \code{!=}, \pcode{&&}, \pcode{||}, \pcode{true} and \pcode{false}) |
38 \pcode{while}-loops and so on) |
38 \item single statements (that is \pcode{skip}, assignments, \pcode{if}s, |
|
39 \pcode{while}-loops, \pcode{read} and \pcode{write}) |
39 \item compound statements separated by semicolons |
40 \item compound statements separated by semicolons |
40 \item blocks which are enclosed in curly parentheses |
41 \item blocks which are enclosed in curly parentheses |
41 \end{itemize} |
42 \end{itemize} |
42 |
43 |
43 \subsection*{Question 2} |
44 \subsection*{Question 2} |
76 case class Aop(o: String, a1: AExp, a2: AExp) extends AExp |
77 case class Aop(o: String, a1: AExp, a2: AExp) extends AExp |
77 |
78 |
78 case object True extends BExp |
79 case object True extends BExp |
79 case object False extends BExp |
80 case object False extends BExp |
80 case class Bop(o: String, a1: AExp, a2: AExp) extends BExp |
81 case class Bop(o: String, a1: AExp, a2: AExp) extends BExp |
|
82 case class Lop(o: String, b1: BExp, b2: BExp) extends BExp |
81 \end{lstlisting} |
83 \end{lstlisting} |
82 \caption{The datatype for parse trees in Scala.\label{trees}} |
84 \caption{The datatype for parse trees in Scala.\label{trees}} |
83 \end{figure} |
85 \end{figure} |
84 |
86 |
85 \subsection*{Question 3} |
87 \subsection*{Question 3} |