内容:
某程序设计语言子集编译器的实现,包括从词法分析、语法分析、语义分析及中间代码生成、优化和目标代码生成各阶段的实现。
推荐小C语言文法:
举例:小C语言源程序
main()
{
int a, b;
a=1;
b = a + 1;
}
小C语言文法
1. <程序>→<main关键字>(){<声明序列><语句序列>}
2. <声明序列>→<声明序列><声明语句>|<声明语句>|<空>
3. <声明语句>→<int关键字><标识符表>;
4. <标识符表>→<标识符>,<标识符表>|<标识符>
5. <语句序列>→<语句序列><语句>|<语句>
6. <语句>→<if语句>|<while语句>|<for语句>|<scanf语句>|<printf语句>
|<复合语句>|<赋值语句>
7. <if语句>→<if关键字> (<表达式>)<复合语句>;
|<if关键字> (<表达式>)<复合语句><else关键字><复合语句>;
8. <while语句>→<while关键字> (<表达式>)<复合语句>;
9. <for语句>→<for关键字> (<表达式>;<表达式>;<表达式>) <复合语句>;
10. <复合语句>→{<语句序列>}
11. <赋值语句>→<表达式>;
12. <表达式>→<标识符>=<算数表达式>|<布尔表达式>
13. <布尔表达式>→<算数表达式> |<算数表达式><关系运算符><算数表达式>
14. <关系运算符>→>|<|>=|<=|==|!=
15. <算数表达式>→<算数表达式>+<项>|<算数表达式>-<项>|<项>
16. <项>→<项>*<因子>|<项>/<因子>|<因子>
17. <因子>→<标识符>|<无符号整数>|(<算数表达式>)
18. <标识符>→<字母>|<标识符><字母>|<标识符><数字>
19. <无符号整数>→<数字>|<无符号整数><数字>
20. <字母>→a|b|…|z|A|B|…|Z
21. <数字>→0|1|2|3|4|5|6|7|8|9
22. <main关键字>→main
23. <if关键字>→if
24. <else关键字>→else
25. <while关键字>→while
26. <for关键字>→for
27. <int关键字>→int
至少完成对如下文法的词法、语法分析。
赋值表达式文法 G(E):
1. <表达式>→<标识符>=<算数表达式> E → i = E
2. <算数表达式>→<算数表达式>+<项>|<项> E → E + T | T
3. <项>→<项>*<因子>|<因子> T → T * F | F
4. <因子>→<标识符>|(<算数表达式>) F → i | (E)
如果采用递归下降分析方法,请注意将文法改写成LL(1)文法。
目的:
1、理解编译器的工作机制
2、掌握编译器的构造方法
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|