1. program->declaration-list
2. declaration-list->declaration{declaration}
3. declaration->type-specifier ID (var-declaration|fun-declaration)
4. var-declaration->(ε| [NUM] ) ;
5. type-specifier->int | void
6. fun-declaration->‘(’ params ‘)’compound-stmt
7. params->params-list | void
8. params-list->param{,param}
9. param->type specifier ID (ε|[ ])
10. compound-stmt->‘{’local-declaration statement-list‘}’
11. local-declarations->{type-specifier ID var-declaration}
12. statement-list->{statement}
13. statement->expression-stmt|compound-stmt|selection-stmt|
iteration-stmt|return-stmt
14. expression-stmt->(ε|expression)
15. selection-stmt->if ‘(’expression ‘)’ statement(ε|else statement)
16. iteration-stmt->while‘(’expression ‘)’ statement
17. return-stmt->return(ε|expression) ;
18. expression->ID var=expression|simple-expression
19. var->(ε|[expression])
20. simple-expression->additive-expression(ε|relop
additive-expression)