自定义解析器 c语言,GitHub - Obscurepawn/Chan-s-C-Compiler: 编译原理 C语言编译器(包括词法/语法/语义分析器等)...

编译原理 - 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.文法的词素之间必须有空格分开。

项目结构如下:

687474703a2f2f696d672e6d792e6373646e2e6e65742f75706c6f6164732f3230313231312f32332f313335333634373430375f323530372e6a7067

文法如下:

wenfa.txt:

-> ( ) { }

-> | $

-> describe

-> type

->

-> | $

-> *

->

-> id

-> [ ] | $

-> ( ) | |

-> digit

->

->

-> * | / | $

-> + | - | $

-> | $

->

-> = | $

-> | { }

->

-> , | $

-> , | $

->

-> | $

-> ;

-> | | | | $

->

-> = ; | ( ) ;

->

-> , | $

-> | |

-> string

-> for ( ; ) { }

->

-> < | > | == | !=

->

-> ++ | --

-> if ( ) { }

-> else { } | $

-> return ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值