编译原理课,老师布置了一个大作业,给定一个文法,编写程序实现一个词法分析器,能够检测出给定程序的每个合法词法单元的编号,对于不合乎词法规则的词法单元则给出错误提示及类型,并显示出错的具体位置。具体文法如下:
一、 字符集定义
1. <字符集> → <字母>│<数字>│<单界符>
2. <字母> → A│B│…│Z│a│b│…│z
3. <数字> → 0│1│2│…│9
4. <单界符> → +│-│*│/│=│<│>│(│)│[│]│:│. │; │,
二、 单词集定义
5.<单词集> → <保留字>│<双界符>│<标识符>│<常数>│<单界符>
6.<保留字> → and│array│begin│bool│call│case│char│constant│dim│do│else│end│false│for│if│input│integer│not│of│or│output│procedure│program│read│real│repeat│set│stop│then│to│true│until│var│while│write
7.<双界符> → <>│<=│>=│:= │..
8.<标识符> → <字母>│<字母><字母数字排列>
9.<字母数字排列> → <字母>│<数字>│<字母><字母数字排列>│<数字><字母数字排列>
10.<常数> → <整数>│<布尔常数>│<字符常数>
11.<整数> → <数字>│<数字><整数>
12.<布尔常数> → true│false
13.<字符常数> → ' 除 {'} 外的任意字符串 '
14. <注释语句>→ /*除 {*/} 外的任意字符串*/
合法词法单元的编码如下:
单 词 |
种别码 |
|
单 词 |
种别码 |
|
单 词 |
种别码 |
and |
1 |
|
output |
21 |
|
* |
41 |
array |
2 |
|
procedure |
22 |
|
*/ |
取消 |
begin |
3 |
|