编译原理
实验 1 词法分析程序的设计与实现
【实验目的和要求】
设计、编写、调试一个具体的词法分析程序,加深对词法分析原理的理解。
【实验内容】
编译器的实现通常分成几个阶段来完成,本次实验,是为根据给定的文法实现一个小型编译器的词法分析阶
段要完成的任务。请根据给定的文法设计并实现词法分析程序,从源程序中识别出单词,记录其单词类别和单词
值,输入输出及处理要求如下:
(1)数据结构和与语法分析程序的接口请自行定义;类别码需按下表格式统一定义;
(2)为了方便进行自动评测,输入的被编译源文件统一命名为 testfile.txt(注意不要写错文件名);输出的结果
文件统一命名为 output.txt(注意不要写错文件名),结果文件中每行按如下方式组织:
单词类别码 单词的字符/字符串形式(中间仅用一个空格间隔)
单词的类别码请统一按如下形式定义:
注:词法分析和语法分析实验都针对此文法,语法分析实验需在词法分析实验的基础上进行增量式开发。
[文法定义]:
<标识符>::=<字母>{<字母>|<数字>} //标识符和关键字都不区分大小写,比如 if 和 IF 均为
关键字,不允许出现与关键字相同的标识符
<字母>::=_|a|...|z|A|...|Z
<数字>::=0|1|...|9
<整数>::=[+|-]<无符号整数>
<无符号整数>::=<数字>{<数字>}
<字符>::='<加法运算符>'|'<乘法运算符>'|'<字母>'|'<数字>'
<加法运算符>::=+|-
<乘法运算符>::=*|/
<字符串>::="{十进制编码为 32,33,35-126 的 ASCII 字符}" //字符串中要求至少有一个字符
(3)输入形式:testfile.txt 中的符合文法要求的测试程序。
(4)输出形式:要求将词法分析结果输出至 output.txt 中。
特别提醒:
(1)读取的字符串要原样保留着便于输出,特别是数字,这里输出的并不是真正的单词值,其实是读入的
字符串,单词值需另行记录。
(2)本次实验只考核对正确程序的处理,但需要为今后可能出现的错误情况预留接口。
(3)如果为今后的编译器的进一步设计考虑,需要考虑错误处理,需要输出错误的行号,则在词法分析的
时候注意记录该信息。