Browse Source

Improve exercise

pull/1/head
Malte Schmitz 9 years ago
parent
commit
260fafc769
1 changed files with 7 additions and 7 deletions
  1. +7
    -7
      README.md

+ 7
- 7
README.md View File

@@ -55,24 +55,24 @@ The expected output is


## Exercise ## Exercise


In order to understand how this little application works, I suggest trying to extend it. For example you could try to implement the `++` operator which increments a variable. This has to be done in three steps
In order to understand how this little application works, I suggest trying to extend it. For example you could try to implement the addition assignment `+=` statement which assigns a variable to its current value plus the evaluation of the expression on the right hand side. This has to be done in three steps


1. Add a class `Increment` in the `program` package with the attribute `identifier` of type `Identifier` storing the name of the variable that will be incremented.
1. Add a class `AdditionAssignment` in the `program` package with the attribute `identifier` of type `Identifier` storing the name of the variable that will be assigned and the attributed `expression` of type `Expression` storing the right hand side expression.


2. Update the `Parser` by extending the `Stmt` rule 2. Update the `Parser` by extending the `Stmt` rule


``` ```
Stmt = ... | Id "++"
Stmt = ... | Id "+=" Expr
``` ```


3. Update the `Interpreter` by extending the `sem` function either by rewriting the increment operator as an assignment
3. Update the `Interpreter` by extending the `sem` function either by rewriting the new addition assignment statement as an assignment and an addition


``` ```
sem(x "++", v) = sem(x ":=" x "+" 1, v)
sem(x "+=" e, v) = sem(x ":=" x "+" e, v)
``` ```


or by directly applying the incrementation
or by directly applying the assignment and the addition


``` ```
sem(x "++", v) = v.update(x, v(x) + 1)
sem(x "+=" e, v) = v.update(x, v(x) + eval(e, v))
``` ```

Loading…
Cancel
Save