MiniJava Lexical Structure Program ::= (Token | Whitespace)* Token ::= ID | Integer | ReservedWord | Operator | Delimiter ID ::= Letter (Letter | Digit)* Letter ::= a | ... | z | A | ... | Z Digit ::= 0 | ... | 9 NonZeroDigit ::= 1 | ... | 9 Integer ::= NonZeroDigit Digit* | 0 ReservedWord ::= class | public | static | extends | void | int | boolean | if | else | while | return | null | true | false | this | new | String | main | System.out.println Operator ::= + | - | * | / | < | <= | >= | > | == | != | && | || | ! Delimiter ::= ; | . | , | = | ( | ) | { | } | [ | ] Whitespace ::= | | | Comment Comment ::= (“//” to end of line, “/*...*/” non-nested block comments)