山东科技大学编译原理课程设计 联系客服

发布时间 : 星期六 文章山东科技大学编译原理课程设计更新完毕开始阅读

山东科技大学学生课程设计

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