山东科技大学学生课程设计
c) 模块间的调用关系
3. 详细设计
主体代码部分: %%
//识别关键字 {key}
{printf(\行 \打印行号
printf(\关键字\\n\输出关键字 //识别数字 {num}
{printf(\行 \打印行号
printf(\数字\\n\输出数字 //识别关系运算符 {guanxi}
{printf(\行 \打印行号
printf(\关系运算符\\n\输出关系运算符 //识别关系运算符
6
山东科技大学学生课程设计
{suanshu}
{printf(\行 \打印行号
printf(\算术运算符\\n\输出算术运算符 //识别分界符 {fenjie}
{printf(\行 \打印行号
printf(\关系运算符\\n\输出分界符 //识别注释符 {zhushi}
{printf(\行 \打印行号
printf(\注释符\\n\输出注释符号 //识别标识符
{id}
{printf(\行 \打印行号
printf(\标志符号\\n\打印标识符 //识别错误的标识符 {error}
{ printf(\行 \
printf(\//识别空格
{whitespace} {}//忽略空格 //识别换行
{enter}
{linenum++;}//遇到回车行号自动加1
7
山东科技大学学生课程设计
analyse文件是否为空退出读一个字符字母关键字非关键字,即为标识符继续判断,下一个单词
四、运行结果及分析 1. 测试数据
在test.txt文件中写入如下数据。 void main() { int x;int y;
x = input(); y = intput(); output(gcd(x,y));}
8
山东科技大学学生课程设计
2.测试输出的结果
3. 设计与思考
基于lex的词法分析,一个模块定义好了之后,其他模块也就出来了。难点在于正则表达式的设计,每个模块都有定义集,规则集和辅助程序集。而且第一部分用“%{”和“%}”括起来。第一和第三个部分为C语言的代码和函数定义,第二个部分为一些规则。
五、总结
通过本次实验,学会了基于Lex的词法分析器构造方法。在实验过程中,万事开头难,刚开始不知道怎么做,以及不知道如何使用老师给的软件,在仔细分析了需求之后,查找了一些关于Parser Genarator 2软件的使用方法,很快的连接好了VC6.0和Parser Genarator2.然后输入简单的程序对其进行了测试,成功后,给自己 极大地信心继续完成接下来的实验,参考了资料的源程序之后,动手开始写自己的代码,最终一步步实现能够达到要求的程序。经过程序的书写,使我了解了Lex语言。了解了基于LEX语言的词法分析程序构造的重要性,对今后的学习和工作有很大的帮助。
9
相关推荐: