|
The Grammar |
|---|
| <program> |    ::=    | { <class-decl> }* <statement> |
| <class-decl> |    ::=    | class <identifier> extends < identifier> { { field <identifier> ; }* { <method-decl> }* } |
| <method-decl> |    ::=    | method <identifier> ( { <identifier> }*(,) ) { { <statement> ; }* return <expression > ; } |
| <statement> |    ::=    | <identifier> = < expression> |
|    |    | print <expression> | |
|    |    | {{<statement>}*(;) } | |
|    |    | if <expression> < statement> else <statement> | |
|    |    | while <expression> <statement> | |
|    |    | var <identifier> = <expression> ; <statement> | |
| <expr> |    ::=    | <number> |
|    |    | <identifier> | |
|    |    | <boolean> | |
|    |    | new <identifier> ( { <expression> }*(,) ) | |
|    |    | send <expression> . < identifier> ( { <expression> }*(,) ) | |
|    |    | super . < identifier> ( { <expression> }*(,) ) | |
|    |    | ( lambda ( {<symbol>}* ) <expr> ) | |
|    |    | ( if <expr> <expr> <expr> ) | |
|    |    | ( cond { ( <bool-expr> <expr> ) }* ( else <expr> ) ) | |
|    |    | ( let ( { ( <id> <expr> ) }* ) <expr> ) | |
|    |    | ( letrec ( { ( <id> ( lambda ( { <id> }* ) <expr> ) }* ) <expr> ) | |
|    |    | ( <expression> { <expression>}* ) |
With primitive operators add, sub, mul, div, mod, cons, car, cdr, list, empty-list, empty?, equal, lesser, greater, and, or, xor.
|
Interpreter |
|---|
Modify your existing parse and execute functions to handle programs in the new language.
Notes: