【vc++精品源码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了vc++精品源码-借助Lex 和Yacc 进行词法语法分析 - 考研的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
借助 Lex 和 Yacc 进行词法语法分析一、 实验目的: 1. 通过对实验型程序设计语言 C1 的定义,掌握程序设计语言的基本语法和语义; 2. 使用 Lex 及 Yacc 实现词法分析和语法分析;二、 实验内容:C1文法 这里定义了一个编程语言称作C1,这是一种适合编译器
设计方案的语言,包括函数和数组。
本质上它是C的一个子集,但省去了一些重要的部分,因此得名。
C1惯用的词法1. 下面是语言的关键字: else if int return void while 所有的关键字都是保留字,并且必须是小写。
2. 下面是专用符号: - / lt lt gt gt / /3. 其他标记是ID 和NUM ,通过下列正则表达式定义: ID letter letter NUM digit digit letter a..zA..Z digit 0..9 小写和大写字母是有区别的。
4. 空格由空白、换行符和制表符组成。
空格通常被忽略,除了它必须分开ID、NUM 关键字。
5. 注释用通常的C语言符号/ . . . /围起来。
注释可以放在任何空白出现的位置即注释不能放在标记内上,且可以超过一行。
注释不能嵌套。
C1的语法和语义1. program → declaration-list2. declaration-list → declaration-list declaration declaration3. declaration → var-declaration fun-declaration4. var-declaration → type-specifier ID type-specifier ID NUM 5. type-specifier → int void float6. fun-declaration → type-specifier IDparams compound-stmt7. params → params-list void8. param-list → param-listparam param9. param → type-specifier ID type-specifier ID10. compound-stmt → local-declarations statement-list 11. local-declarations → local-declarations var-declaration empty12. statement-list → statement-liststatement empty13. statement → expression-stmt compound-stmt selection-stmt iteration-stmt return-stmt14. expression-stmt → expression15. selection-stmt → if expression statement if expression statement else statement16. iteration-stmt → while expression statement17. return-stmt → return return expression18. expression → var expression simple-expression19. var → ID IDexpression20. simple-expression → additive-expression relop additive-expression additive-expression21. relop → lt lt gt gt ampamp 22. additive-expression → additive-expression addop term term23. addop → -24. term → term mulopfactor factor25. mulop → /26. factor → expression var call NUM27. call → ID args28. args → arg-list empty29. arg-list → arg-listexpression expression下面是对以上每条文法规则,给出了相关语义的简短解释。
1.program → declaration-list2.declaration-list → declaration-list declaration declaration3.declaration → var-declaration fun-declaration程序由声明的列表或序列组成,声明可以是函数或变量声明,顺序是任意的。
至少必须有一个声明。
接下来是语义限制这些在C中不会出现。
所有的变量和函数在使用前必须声明这避免了向后backpatching引用。
程序中最后的声明必须是一个函数声明,名字为main。
注意,C1缺乏原型,因此声明和定义之间没有区别像C一样。
4.var-declaration → type-specifier ID type-specifier IDNUM5.type-specifier → int void float变量声明或者声明了简单的整数或浮点类型变量,或者是基类型为整数或浮点的数组变量,索引范围从0到NUM-1。
注意,在C1中仅有的基本类型是整型和空类型。
在一个变量声明中,只能使用类型指示符int。
void用于函数声明参见下面。
也要注意,每个声明只能声明一个变量。
6.fun-declaration → type-specifier IDparams compound-stmt7.params → param-list void8.param-list → param-list param param9.param → type-specifier ID type-specifier ID函数声明由返回类型指示符、标识符以及在圆括号内的用逗号分开的参数列表组成,后面跟着一个复合语句,是函数的代码。
如果函数的返回类型是void,那么函数不返回任何值即是一个过程。
函数的参数可以是void即没有参数,或者一列描述函数的参数。
参数后面跟着方括号是数组参数,其大小是可变的。
简单的整型参数由值传递。
数组参数由引用来传递也就是指针,在调用时必须通过数组变量来匹配。
注意,类型“函数”没有参数。
一个函数参数的作用域等于函数声明的复合语句,函数的每次请求都有一个独立的参