编译原理 - C语言编译器(包括词法/语法分析器等)
项目结构如下
-source
--lexAnalysis词法分析器(原创)
---analyse.c 词法分析器
---text.c 测试用例(被分析的C代码)
--lexSynAnalysis语法分析器(转存)
---LexAnalysis.h词法分析头文件
---SynAnalysis.h语法分析头文件
---LexAnalysis.cpp词法分析Cpp文件
---SynAnalysis.cpp语法分析Cpp代码
---main.cpp 主文件
---wenfa.txt文法
---test.txt测试用例(被分析的C代码)
词法分析器
[注:Sourse中lexAnalysis文件夹中为原创, 欢迎大家交流学习 ]
没有太多的时间精力, 故暂时中断.
...
看到一篇非常棒的语法分析器(来自于niuox大神), 故将其源码转存于此, 说明文档如下
语法分析器
[注: Source中lexSynAnalysis文件夹中的源码来自于niuox大神]
本程序实现一个分析C语言的词法分析+语法分析。
注意:
1.文法简略,没有实现的部分,可以在此文法的基础上进行扩充,本程序的采用自顶向下的LL(1)文法。
2.可以自动实现求First 集和 Follow 集。
3.处终结符外(有些硬编码的成分),终结符的文法可以自定义,也就是说读者可以自定义文法。
4.为方便理解,C语言的文法描述写成中文。
5.程序将词法分析和语法分析结合起来,词法分析的结果作为语法分析的输入。
6.最终结果在控制台显示的有:词法分析、First集、Follow集、Select集,在preciateResult.txt 中写入了语法分析结果,在preciateTable.txt 中写入了预测分析表。
7.文法的词素之间必须有空格分开。
项目结构如下:
文法如下:
wenfa.txt:
-> ( ) { }
-> | $
-> describe
-> type
->
-> | $
-> *
->
-> id
-> [ ] | $
-> ( ) | |
-> digit
->
->
-> * | / | $
-> + | - | $
-> | $
->
-> = | $
-> | { }
->
-> , | $
-> , | $
->
-> | $
-> ;
-> | | | | $
->
-> = ; | ( ) ;
->
-> , | $
-> | |
-> string
-> for ( ; ) { }
->
-> < | > | == | !=
->
-> ++ | --
-> if ( ) { }
-> else { } | $
-> return ;