C语言的语法分析器

Python019

C语言的语法分析器,第1张

先做个LL(1)或者LALR的语法分析器,然后先把教材上的几个LL(1)的例子调通过。然后网上有C语言子集的文法,有人做了转成大小写这样的表述。通过那个的测试就差不多了。。。。其实做语法分析也没多大用 编译器的难点在于语法制导、代码优化之类的,真要做C语言的完整编译器,普通的学生都几乎不可能实现。。。。就不多说了 你可以动手开始做了 如果你有较强的程序设计能力,做个漂亮的LR(1)分析器还是可以的,实在不会就做SLR(1)这样的分析器,如果程序设计能力比较差,建议先做LL(1),那个比较好做。码字不易,望采纳!

顾名思义,词法分析器检查的是词法,语法分析器分析的是语法,什么是词法,什么是语法你弄明白就知道了。

所谓词法,源代码由字符流组成,字符流中包括关键字,变量名,方法名,括号等等符号,其中变量名要满足不能包括标点符号,不能以数字开头的数字与字母的字符串这个条件,对于括号要成对出现等等,这就是词法

而语法,词法没有问题才能进入语法分析,语法就是词排列的方法,字面意义,比如一句中文:我吃萝卜,里面有三个词我 吃 萝卜,除了“我吃萝卜”外,这三个词还可以组成,“萝卜吃我”“萝卜我吃”等,显然按照中文文法,后面的两句话是不对的,语法分析器就是分析类似这样的语法的。

书籍请参考编译原理的龙书,以及flex,bison,llvm的manual。如何写我可以给你一个大致的流程,编译器由词法分析器->语法分析器->中间代码生成器->后端组成。用C语言写编译器一般可以按照以下步骤:1.使用flex生成词法分析器。(flex可以通过自己编写的描述文件来自动生成词法分析器)2.使用bison生成语法分析器。(bison可以通过自己编写的描述文件来自动生成语法分析器)3.通过语法分析器得到输入代码的语法树表示。4.编写遍历函数遍历语法树生成中间代码。(这里推荐使用LLVM的中间代码表示)5.利用LLVM工具集来编译执行所得到的中间代码。