基于LEX的词法分析器实验报告(2)

2018-12-08 18:34

定义识别错误的字符串规则

当开头为数字的后面为字母的字符串时,是错误的标识符。 {error_id}

{printf(\以数字开头的字符自动报错 定义忽略空格规则 {whitespace}

{/* skip whitespace */}//忽略空格 定义忽略回车规则 {enter}

{lineno++;}//遇到回车自动加行号忽略

? 辅助程序集中包括

主函数main ()和辅助函数toupper()。

? 程序代码实现 Lex代码

//定义集,包括头文件和变量定义 %{

#include #include #include #include int lineno=1;//定义行号 %}

//定义正则表达式 letter [A-Za-z] //字母 digit [0-9] //数字

id ({letter}|[_])({letter}|{digit}|[_])* //开头为字母的标识符 error_id ({digit})+({letter})+ //开头为数字的错误标识符 num {digit}+ //数字集合 whitespace [ \\t]+ //空格 enter [\\n]+ //回车 //定义识别规则 %%

//识别保留字

\

{Upper(yytext,yyleng);

printf(\行\打印行号

printf(\输出保留字 //识别数字 {num}

{printf(\行\打印行号

printf(\输出数字 //识别专用符号

\|\

{printf(\行\打印行号

printf(\输出特殊符号 //识别标识符 {id}

{printf(\行\打印行号

printf(\打印标识符 //识别错误的标识符 {error_id} {printf(\行\

printf(\以数字开头的字符自动报错 //识别空格

{whitespace}

{/* skip whitespace */}//忽略空格 //识别回车

{enter}

{lineno++;}//遇到回车自动加行号忽略 %%

//转换大小写

Upper(char *s,int l){ int i;

for(i=0;i

}//将保留字变为大写

//主函数 main(void) {

//定义输入文件名变量 char infilename[400]; printf(\输入文件名:\ scanf(\

yyin = fopen(infilename,\读取文件 printf(\开始词法分析: \\n\

return yylex(); }

五、测试过程及结果

(1)Win7下lex 与 yacc的安装配置

测试安装是否成功,测试结果如图所示,当前文件夹多了两个文件,安装成功:

(2)利用Parser Genarator的词法分析器构造

六、实验总结:

通过本实验,我了解了Lex的用法,并构造了Parser Genarator编译器。成功将实例程序中的Token识别出来,并记录其value值。在学习的过程中,感觉理解起来比较困难,所以操作过程中出现了很多错误。但是,最终在老师和同学的帮助下完成了此次实验。

指导教师评阅成绩:

指导教师评阅意见:

. .

提交报告时间:2015年12月23日


基于LEX的词法分析器实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:综合性医院--设计任务书

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: