TEST语言语法语义规则
程序中最后的声明必须是一个函数声明,名字为main。
没有原型说明, 约定:主调函数的定义必须在被调函数的定义之前。
1.<program>→{ fun_declaration }<main_declaration>
2.<fun_declaration> → function ID’(‘‘ )’< function_body>
3.<main_declaration>→main’(‘‘ )’ < function_body>
4.<function_body>→ ‘{‘<declaration_list><statement_list>’}’
5.<declaration_list>→<declaration_list><declaration_stat> |ε
<declaration_list>→{<declaration_stat>}
6. <declaration_stat>→int ID;
7. <statement_list>→<statement_list><statement>| ε
<statement_list>→{<statement>}
8.<statement>→<if_stat>|<while_stat>|<for_stat>|<read_stat>
|<write_stat>|<compound_stat> |<expression_stat> | < call _stat>
9. <if_stat>→ if ‘(‘<expr>) <statement > [else < statement >]
10. <while_stat>→ while ‘(‘<expr >’)’ < statement >
11. <for_stat>→ for’(‘<expr>;<expr>;<expr>’)’<statement>
12. <write_stat>→write <expression>;
13. <read_stat>→read ID;
14. <compound_stat>→’{‘<statement_list>’}’
15. <expression_stat>→< expression >;|;
16. < call _stat>→call I D’(‘’‘)
17. < expression >→ ID=<bool_expr>|<bool_expr>
18. <bool_expr>-><additive_expr>
|< additive_expr >(>|<|>=|<=|==|!=)< additive_expr >
19. < additive_expr>→<term>{(+|-)< term >}
20. < term >→<factor>{(*| /)< factor >}
21. < factor >→’(‘< additive_expr >’)’|ID|NUM
有待扩充:
1.函数名、变量名都不可以重名。
(有待修改:同一函数内部变量名不能相同,但不同函数的变量名可以相同,符号表的处理会更复杂)
2.考虑函数带返回值的情况;
3.考虑函数带参数的情况。