单词的词法分析程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单词的词法分析程序设计
1实验题目
对于给定的源程序(如C语言或Pascal等),要求从组成源程序的字符行中寻找出单词,并给出它们的种别和属性——输出二元组序列。以便提供给语法分析的时候使用。要求能识别所有的关键字,标志符等,并且能够对出先的一些词法规则的错误进行必要的处理。
2 实验内容和要求
1. 给出语言的词法规则描述
2. 要求识别标识符、关键字、整常数、字符常数、浮点常数等
3. 要求能识别单界符:+,-,÷,×,:等符号
4. 双界符:/*,:=,等
5. 要求完成一些相关的辅助任务。一个任务实滤掉源程序中的注释、空格、制表符、换行符;另一个任务是使编译器能够将发现的错误信息与源程序的出错位置联系起来,以及错误的类型等。
3 待分析的词法文件
文件名称为:C:\1.txt (分析结果见7:程序结果)
4实验分析与设计过程
实验分析与设计过程
1. 实验说明
分析语言的选择:由于对C语言比较熟悉,我选择分析的程序为C语言编写的程序。
2. 词法分析器的功能以及输出形式分析
1) 功能:
i. 对于输入的C源程序,输出单词符号,把相应的源程序的字符串转
换成单词符号的序列。
ii. 保存符号表,为所有的标识符建立一个符号表,以便于在语法和语义分析的时候使用。
iii. 错误输出与提示
2) 结果输出形式:
i. 对于token用二元组输出,
ii. 符号表可以单独输出到文件中
iii. 错误输出到界面即可
3. 单词符号的表示
各种关键字(保留字、基本字),各种运算符、各种分界符,都用一个种别码来标识。例:关键字break、保留字asm、运算符”+”、在源程序中1,2,3表示。即所规定得到的中别码对应的词法描述为:
1为关键字2为标志符
3为常数4为运算符或界符
5 算法描述
由于这是一个用高级语言编写一个词法分析器,使之能识别输入串,并把分析结果(单词符号,标识符,关键字等等)输出.输入源程序,输入单词符号,本词法分析器可以辨别关键字,标识符,常数,运算符号和某些界符,运用了文件读入来获取源程序代码,再对该源程序代码进行词法分析,这就是词法分析器的基本功能.当词法分析器调用预处理子程序处理出一串输入字符放进扫描缓冲区之后,分析器就从此缓冲区中逐一识别单词符号.当缓冲区里的字符串被处理完之后,它又调用预处理子程序来处理新串.
编写的时候,使用了文件的输入和输出,以便于词法分析的通用型,同时在文件输出时,并保存在输出文件output文件中。
从左到右扫描程序,通过初始化:1为关键字;2为标志符;
3为常数;4为运算符或界符。
扫描过程如下:
1.指针扫描所打开的文件首,如果是字母开始处理字符关键字或者标识符2.为单字符运算、限界符,写入输出文件并将扫描文件指针回退一个字符;
3.为双字符运算、限界符,写输出文件;
4.读入的下一个字符为文件结束符;
5.只考虑是否为单字符运算、限界符,若是,写输出文件
6 程序框图如下
7 程序结果如下(源程序见磁盘)
8实验感想
词法分析是编译的第一个阶段,它的主要任务是从左至右扫描整个程序的每个字符,将源程序变换为单词序列,以其内部的表示形式提供给语法分析的各阶段。而做这个实验是使用的是c语言,并没有使用自动生成的词法分析器LEX,但是在做这个实验的时候参考了相关的书籍之后,使用文件打开,并保存输出结果的方式,这样比较能够使程序的通用性加强,同时作为刚开始接触到编译的前端的我,发现了自己还有许多的不足之处。为了以后的语法分析能够结构更加的明晰,那么就必须认真的研读老师所给的相关资料,同时要学会分析较完整定义的相关文法,使之更为直接明了。这个实验主要花费的时间,并不是在于词法分析即源文件中的scan扫描程序阶段,而是在设置文件的出错以及输出,输入阶段,这也说明在原来学习文件调用打开的时候并没有很熟练的运用文件之间的调用的相关操作,这也提醒我在今后学习语言的过程中要细致,要实践。