Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

-只是单纯的实现了词法分析和语法分析

内容:

某程序设计语言子集编译器的实现,包括从词法分析、语法分析、语义分析及中间代码生成、优化和目标代码生成各阶段的实现。

推荐小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、掌握编译器的构造方法

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages