编译原理实验一词法分析实验报告.pdf
臣心一片磁针石,不指南方不肯休。——文天祥
专题1_词法分析程序构造原理与实现
李若森计科1301
一、程序功能描述
[功能]:
完成下述正则文法所描述的C语言子集单词符号的词法分析程序。
[要求]:
(1)给出各单词符号的类别编码。
(2)能发现输入串的错误。
(3)将分析所得二元序列输出到中间文件中。
[文法]:
标识符→c|c余留标识符
余留标识符→d|c
无符号数→d余留无符号数|.小数部分|d
余留无符号数→d余留无符号数|.十进小数|(E|e)指数部分|.|d
十进小数→(E|e)指数部分|d十进小数|d
小数部分→d十进小数|d
指数部分→d余留指数|(+|-)整指数|d
整指数→d余留整指数|d
余留整指数→d余留整指数|d
算数运算符→+|-|*|/|++|--
关系运算符→||==|=|=|!=
逻辑运算符→
位操作运算符→|
赋值运算符→=|+=|-=|*=|/=|%=
特殊运算符→
分隔符→;
保留字:voidintfloatdoubleifelsefordowhile
[说明]:
(1)该语言对大小写不敏感
(2)c代表字母a-zA-Z,d代表数字0-9。
(3)“/*..*/”以及“//”为程序注释部分。
(4)文法中‘’为转义字符
臣心一片磁针石,不指南方不肯休。——文天祥
二、主要数据结构描述
pairint,string:
用pairint,string来存储单个二元组。其中第一个元素为类型号,第二个为
元素的值。当类型号小于40时代表程序分界符,第二个元素不存储有效信息,用
“-”代替;类型号为40时是标识符,第二个元素存储标识符字符串;类型号为41
时代表实数,第二个元素存储的是该实数的二进制值。
vector:
vector是C++中的动态数组,用来存储每一行的二元组。
三、程序结构描述
设计方法:
状态转换图:(DFAM)
*=/%!=
01
=
2
3=15
4