实验目的:
通过设计编制调试具体的词法分析程序和相应的LEX程序,掌握词法分析程序的设计思想,掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。掌握LEX源程序的基本组成及其使用方法,加深对词法分析程序的理解。
实验内容:
分别使用某种高级语言(不能使用正则表达式)和LEX实现一个C语言子集的词法分析器,该词法分析器读入一个C语言的源程序,完成有以下功能。
滤掉空格。(其中空白符、制表符和换行符均视为空格,用来分隔单词)
滤掉注释。(其中注释包括两种形式:/*…*/和//)
遇到非法单词时可显示“Error”,然后跳过错误部分继续显示
将识别出来的合法单词分为以下五大类,依次输出各个单词的内部编码(编码为1—5,如下)及单词符号自身值。
1. 关键字
2. 标识符
3. 常数:包括整数和实数(包括十进制小数形式,如1.23和指数形式如1.2e5或1.2E5)
4. 运算符:如= + - * / < >= == != 等符号
5. 分隔符:; { } 等符号
程序输入/输出示例:
如源程序为C语言程序test.c:
main()
{/*test.c*/
int a,b;
a = 10;
b = a + 20;
//end of program
}
要求输出结果如下,保存在文件result.txt中
2, main
5,(
5,)
5,{
1,int
2,a
5,,
2,b
5,;
2,a
4,=
3,10
5,;
2,b
4,=
2,a
4,+
3,20
5,;
5,}
1