这学期学编译原理,课程设计是为SNL文法实现一个词法分析器,和递归下降法或LL(1)分析法实现的语法分析器。
总程序:
1)Program::=ProgramHead DeclarePart ProgranBody .
2)ProgramHead::=program ProgranName
3)ProgranName::=ID
4)DeclarePart::=TypeDecpa...
分类:
其他好文 时间:
2015-06-14 15:15:46
阅读次数:
528
知道文法规则后,我们就要分析出其中的所有的符号、操作符、标示符(id)、字面值(nb)、以及关键字。其中符号、操作符、关键字都是一符一类,我们需要写程序分析每一个字符,最终得到一个token序列,标示符表及字面值表。闲话少说,看代码(下面程序使用vs2013编译)
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#in...
分类:
其他好文 时间:
2015-06-14 15:15:41
阅读次数:
198
得到token序列后,我们就可以采用递归下降法对其进行语法分析。如果没有语法错误,打印token序列,提示没有语法错误,否则,打印已经匹配的token,提示语法错误。(下面程序使用vs2013编译)
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
using namesp...
分类:
其他好文 时间:
2015-06-14 15:15:24
阅读次数:
337
一、项目说明1. 项目简介项目目的:设计并实现一个包含预处理功能的词法分析程序,加深对编译中词法分析过程的理解。项目要求:1、实现预处理功能源程序中可能包含有对程序执行无意义的符号,要求将其剔除。 首先编制一个源程序的输入过程,从键盘、文件或文本框输入若干行语句,依次存入输入缓冲区(字符型数据);然...
分类:
编程语言 时间:
2015-06-13 18:24:09
阅读次数:
481
* 本学期开了编译原理这门课,自己会问这样的问题
课本上介绍了词法分析器 ,语法分析器 ,语义分析器,那么这在成熟的编译器中,占据着怎样的角色?
日常,我接触的最多的编译器是gcc ,clang(当然,还有vb之类的),他们的有啥差别?该如何选择?
基于gcc,如何设计一门自己的语言(或者从编译器的角度去看待一门计算机语言),编译工具链如何快速跟上?
一款新的处理器被推出,如何解决针对它的平台的编...
分类:
其他好文 时间:
2015-06-07 01:05:53
阅读次数:
138
【前话】 编译原理的第一个实验——词法分析器验收时,老师要求最后的结果用GUI的形式表现出来。想想确实,黑白的控制台应用程序界面在用户操作时的确不如GUI 友好。GUI界面也算是大势所趋。我现在掌握三种语言的基本语法——c/c++、Java和python。python好久之前学过然后没用就忘记了,最...
分类:
编程语言 时间:
2015-06-02 15:02:12
阅读次数:
152
最近在学习编译原理,用图转移算法写了一个IF的词法分析器,本来觉得原理挺简单的,没想到还鼓弄了一天才弄出来,这里把写的代码放这里记录下通过myfile.txt输入。输入与输出如下输入:ifx if iif if 234iff if输出 代码如下, 1 #include 2 #incl...
分类:
其他好文 时间:
2015-05-26 12:21:33
阅读次数:
211
Java编写的C语言词法分析器这是java编写的C语言词法分析器,我也是参考很多代码,然后核心代码整理起来,放在QQ空间和博客上,目的是互相学习借鉴,希望可以得到高手改进。这个词法分析器实现的功能有打开文件、保存文件、打开帮助文档、文本域内容的剪切和复制和黏贴、进行词法分析程序的项目结构如图,Wor...
分类:
编程语言 时间:
2015-05-24 17:21:23
阅读次数:
158
?lex和yacc可以帮助你编写程序转换结构化输入。既包括从输入文件中寻找模式的简单文本搜索程序,也包括将源程序变换为最佳的目标代码的C编译程序等。
?lex使用一系列对可能标记的描述,产生一个能识别那些标记的C例程(我们成为词法分析器。词法分析程序(lexer),或成为扫描程序)。
?lex使用的标记描述称为正则表达式。yacc采用简明的语法描述并产生在一个能分析语法的C例程。即分析程序。yacc...
分类:
其他好文 时间:
2015-05-05 10:36:58
阅读次数:
133
当我们写好一份源代码,提交给编译器的时候,这是编译器对我们提交代码进行词法分析。这个整个编译过程的第一步。词法分析器将我们的提交的代码看作是一个文本,它工作的目的就是将这个文本中不符合我们所使用的语言(c++或者java)的单词(字符串)挑选出来,以及将符合语言的单词(字符串)进行分类。 对于...
分类:
其他好文 时间:
2015-04-30 23:07:07
阅读次数:
220