CS 152 | Fall 2008 | Due Date: 2008-10-23 23:59
Enhance the SL1 interpreter from Lecture 12 to a language SL2 with the following features:
true false and
relational operators == != < <= >
>= that return Boolean values. Operators should have the same
precedence as in Scala. Report an error when a non-Boolean expression is
used as an if condition. The < <= >
>= are only defined for integers. == != are defined
for integers and Boolean values, and they are not defined for function
literals. def construct so that it works like in Scala, for
example
def fac(x) = if (x > 0) x * fac(x - 1) else 1;
A def fun(params) = can be followed either by a single
expression or a block enclosed in { }.
val to var,
and support an assignment expression ident~"="~expr. It
changes the symbol table entry of ident to the value of
expr. The symbol table should now be a list of instances of
case class Binding(name: String, var value: Any)
Unlike in Java, you need not support compound
expressions without parentheses such as x = y = x + 2.
def, var and simple statements (expressions
followed by a semicolon), followed by an expression.
Change the if construct so that the “then” and
“else” parts can be either a single expression or a block
enclosed in { }. (I should have done this in SL1.)
=> is
not required for function literals with no parameterstest1.sl2, ... test5.sl2 for
steps 1 ... 5.while that takes two function
arguments, invoking the second while the first one returns
true. Use it to write an iterative definition of factorial in
SL2. Place it in a file fac.sl2.
When you do this, you will find that SL2 is uncomfortably half-way
between a functional language and a statement-oriented language such as C
or Java. For example, if you have a block that you execute solely for its
side effects, you still have to put a dummy expression (such as
false) at the end.
Make a zip file with name hw3_lastname_firstname.zip,
substituting your own names (duh). The extension must be in lowercase. The file
must contain files hw3/Main.scala,
test1.sl2, etc., with exactly this directory structure (i.e.
hw3 being the only subdirectory after unzipping). My grading
script
scalac hw3/Main.scala ; scala hw3.Main < test1.sl2
etc. 5 points if you follow all of these instructions so that my grading script runs without requiring manual adjustments. Upload your solution to eCampus. You can submit as often as you like; only your last submission counts. Please note that eCampus will reject your submission after the due date.
For an additional 5 points, put at least one question or at least one answer about this homework onto the eCampus discussion group (starting 2008-10-08).