Abstract Syntax for While
Abstract Syntax = concise representation of program as a data structure
- ignores concrete symbols (whether we use “{” or “begin” for blocks)
- maps easily to Scala's case classes
For our While language:
program ::= statement statement ::= print | read | assign | if | while | block print ::= string var assign ::= var expr if ::= exp statement (statement)? while ::= expr statement block ::= statement* expr ::= var | literal | expr binOp expr | unOp expr
The first programming exercise uses this language.
Mapping abstract syntax to Scala:
- one class for each syntactic category (program,statement,read,write,…)
- for class with multiple alternatives:
- make class abstract
- create a subclass for each alternative
- each component of the alternative becomes an argument (field) of the case class
Next: specify concrete textual representation
- tokens (“while”, “if”, “==”, “<”, …)
- concrete syntax (connects these tokens and describes valid grammar)