文法
programs -> block
block -> { decls stmts}
decls -> decls decl | ε
decls -> type id;
type -> type [ num] | basic
stmts -> stmts stmt | ε
stmt -> loc = bool;
| if ( bool ) stmt
| if ( bool ) stmt else stmt
| while ( bool ) stmt
| do stmt while ( bool );
| break;
| block
loc -> loc [ bool ] | id
bool -> bool || join | join
join -> join && equality | equality
equality -> equality == rel | equality != rel | rel
rel -> expr < expr | expr <= expr | expr >=expr | expr > expr | expr
expr -> expr + term | expr - term | term
unary -> !unary | -unary | factory
factory -> ( bool ) | loc | num | real | true | false
詞法分析器