一个小语言的词法分析程序

2016-01-29 12:14 105 1 收藏

一个小语言的词法分析程序,一个小语言的词法分析程序

【 tulaoshi.com - C语言心得技巧 】

一个小语言的词法分析程序
作者:loyalzu

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

下载本文示例代码

前些天写了个小语言的词法分析程序,因为前些天在VC知识库看到一个pascal词法分析的程序,觉得写得挺复杂的。其实词法分析程序的原理都是一样的,所以我想只要搞明白了简单的词法分析程序,再写复杂的就不难了,无非是多加几个关键字,多写几个条件判断语句而已。词法分析是编译程序的基础,也是最简单的。好,现在让我们看程序吧。
先让我们看看这个小语言的文法吧。

G[<程序]:
<程序∷=<程序首部;<分程序.
<程序首部∷=program<标识符
<分程序∷=<复合语句
<复合语句∷=begin<语句序列end
<语句序列∷=<语句{;<语句}
<语句∷=<赋值语句|<复合语句|<条件语句
<赋值语句∷=<标识符:=<表达式
<条件语句∷=if <布尔表达式 then <语句 else <语句
<表达式∷=<项{(+|-)<项}
<项∷=<因式{(*|/)<因式}
<因式∷=<标识符|<无正负号常量|’(’<表达式’)’
<布尔表达式∷=<表达式<关系运算符<表达式
<关系运算符∷= =|<|<=||=|<
<标识符∷=<字母{<字母|<数字}
<无正负号常量∷=<数字{<数字}[.<数字{<数字}]
<字母∷=a|b|c|d|e|f|g|……|u|v|w|x|y|z
<数字∷=0|1|2|3|4|5|6|7|8|9

根据此文法,构造一词法分析程序。输入以“#”为结束符
按照这个文法,找出该语言的关键字,如program,begin,end ,if,then,else,以及其他一些特殊符号,然后再构造一个分析表,如下表:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com) 单词符号  类别编号标识符 1常数 2if 3then 4else 5program 6begin 7end 8+ 9- 10* 11/ 12( 13) 14 15= 16< 17<= 18< 19:= 20; 21. 22

来源:http://www.tulaoshi.com/n/20160129/1485204.html

延伸阅读
标签: PHP
  分析: 我们利用一个文件(data.dat)来存储投票栏目.每个栏目占据一行. 这样一来,便可随意加入和减去想要投票的栏目. 我们再利用一个文件(votes.dat)来存储我们的投票结果. 并纪录最近一位投票者的IP地址,简单的防止一人多投. 所以,您应该在该程序目录下自行建立两个文件data.dat和votes.dat 程序运行过程部分 程序运行时应该...
前不久大家都在讨论怎样通过一个程序来生成另一个程序,我提出了将另一个程序当资源文件包含在程序中一起编译,然后在程序运行时根据需要再重新生成出来,下面是我的一个例子, 在这里,我将windows自带的写字板(writer.exe)当资源. 下面是源代码 //资源文件writer.exe长度为204800,在资源文件中定义为"CUSTOM"资源,编号为1111 ...
在VB5.0具有面向对象的程序设计思想及可视化的编程方式,可开发出各种多媒体应用程序,颇得软件设计者青睐。笔者最近应用VB5.0编制了一程序,成功实现了“图文并茂”的屏幕效果,即:屏幕出现用户选定的一幅赏心悦目的图像,在图像下方有一行字幕缓缓地从屏幕右边向左边移动,全部文字移至左边消失后,从右边又平滑拖出字幕,字幕移动过程中既不...
---- 用过DreamWeaver的人都会发现DreamWeaver将每一个编辑的文件显示在任务栏上,并且用户任意关闭一窗口而不影响其他窗口,好象每一个窗口间没有关联,没有主窗口似的。但我们也能发现其实这些窗口间也有数据是共享的,如存盘的路径。 ---- 经过研究我发现其实这些窗口其实是属于同一程序的,并且实现方法也非常的简单。下面我用Inprise公...
/***********简单的时钟程序,界面不是很美观,您可以根据自己的爱好加以修改,如给表盘加上刻度,将指针改为其它外形等*/#includegraphics.h #includemath.h #includedos.h#define PI 3.1415926 #define x0 320    /*定义钟表中心坐标*/ #define y0 240void DrawClock(int x,int y,int color)   /*画...