cminus词法语法分析

时间:2022-06-29 16:47:07
仿造<<编译原理与实践>>附录B tiny编译器 实现cminus词法语法分析 请使用tiny的方法和框架  使用c语言
cminus文法
C_minus语言中关键字集合:else if int return void while 
专用符号:+ - * / < >= = = != ; , ( ) [ ] {} /* */ 
其他标号:ID NUM,通过正则表达式定义为: 
1)ID = letter(letter | digit)* 
2)NUM = digit digit* 
3)letter = a | … | z | A | … | Z | | _ 
4)digit = 0 | … | 9 
空格由空白(space),换行符(Enter)和制表符(Tab)组成.空格可以被忽略,
除了它们是用来区分ID,NUM关键字. 
注释由 /* …. */ 围起来.注释可以放在任何空白出现的位置,且可以超过一行.
注释不可以嵌套. 
以下是C_minus的BNF定义: 
编号 产生式 
001 program → declaration-list 
002 declaration-list → declaration-list declaration 
003 declaration-list → declaration 
004 declaration → var-declaration 
005 declaration → fun-declaration 
006 var-declaration → type-specifier ID; 
007 var-declaration → type-specifier ID[NUM]; 
008 type-specifier → int 
009 type-specifier → void 
010 fun-declaration → type-specifier ID(params) compound-stmt 
011 params → params-list 
012 params → void 
013 params-list → params-list,param 
014 params-list → param 
015 param → type-specifier ID 
016 param → type-specifier ID[NUM] 
017 compound-stmt → {local-declarations statement-list} 
018 local-declarations →local-declarations var-declaration 
019 local-declarations → empty 
020 statement-list → statement-list statement 
021 statement-list → empty 
022 statement → expression-stmt 
023 statement → compound-stmt 
024 statement → selection-stmt 
025 statement → iteration-stmt 
026 statement → return-stmt 
027 expression-stmt → expression; 
028 expression-stmt →; 
029 selection-stmt → if (expression) statement 
030 selection-stmt → if (expression) statement else statement 
031 iteration-stmt → while (expression) statement 
032 return-stmt → return ; 
033 return-stmt → return expression; 
034 expression → var=expression 
035 expression → simple-expression 
036 var → ID 
037 var → ID[expression] 
038 simple-expression → additive-expression relop additive-expression
039 simple-expression → additive-expression 
040 relop → <= 
041 relop → 
043 relop → >= 
044 relop → == 
045 relop → != 
046 additive-expression → additive-expression addop term 
047 additive-expression → term 
048 addop → + 
049 addop → - 
050 term → term mulop factor 
051 term → factor 
052 mulop → * 
053 mulop → / 
054 factor → (expression) 
055 factor → var 
056 factor → call 
057 factor → NUM 
058 call → ID(args) 
059 args → arg-list 
060 args → empty 
061 arg-list → arg-list,expression 
062 arg-list → expression 

一  C-语言的词法分析器(基于Lex) 报告
目的、意义
基于Parser Genarator的词法分析器构造方法
C-语言词法分析的设计(重要数据结构和数据类型介绍、词法规则、重要处理程序设计)
运行结果及分析
小结
参考资料

二  手工构造C-语言的词法分析器  报告
目的、意义
C-语言词法的特点,正则表达式
识别C-语言Token的DFA设计
重要的数据类型、数据结构设计
介绍DFA实现代码的各种方法的特点,说明自己选择的方案
实现的关键代码分析
运行结果实例、分析
小结
参考资料

三  C-语言的语法分析器(基于Yacc)  报告
目的、意义
C-语言语法的特点,CFG
重要的数据类型、数据结构设计
实现的关键代码分析
运行结果实例、分析
小结
参考资料

14 个解决方案

#1


up

#2


现在的学生都这样啊,呵呵呵

#3


不懂,帮顶。

#4


要源码?百度搜索。比如这儿:
http://bbs.chinaunix.net/viewthread.php?tid=1003081

#6


up

#7


看看

#8


网上源码一堆的.

#9


百度一下
google一下
帮顶一下

#10


http://download.csdn.net/source/335966 
http://download.csdn.net/sort/tag/cminus

#11


好东西啊,慢慢做呗

#12


LZ是学生吗?研究生?
这么大个东西,你还是网上找个源码慢慢看。然后再改进吧

#13


编译原理,再次学习~~

#14


编译原理好难!

#1


up

#2


现在的学生都这样啊,呵呵呵

#3


不懂,帮顶。

#4


要源码?百度搜索。比如这儿:
http://bbs.chinaunix.net/viewthread.php?tid=1003081

#5


#6


up

#7


看看

#8


网上源码一堆的.

#9


百度一下
google一下
帮顶一下

#10


http://download.csdn.net/source/335966 
http://download.csdn.net/sort/tag/cminus

#11


好东西啊,慢慢做呗

#12


LZ是学生吗?研究生?
这么大个东西,你还是网上找个源码慢慢看。然后再改进吧

#13


编译原理,再次学习~~

#14


编译原理好难!