版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..编译原理课程实验报告实验名称:基于LEX的词法分析器学生:宁学生学号:2013020109指导教师毛静一、实验目标自动构造C-语言的的词法分析器,要求能够掌握编译原理的根本理论,,理解编译程序的根本构造,掌握编译各阶段的根本理论和技术,掌握编译程序设计的根本理论和步骤.,增强编写和调试高级语言源程序的能力,掌握词法分析的根本概念和实现方法,熟悉C-语言的各种Token。二、实验原理及方法Lex输入文件由3个局部组成:定义集〔definition〕,规那么集〔rule〕和辅助程序集〔auxiliaryroutine〕或用户程序集〔userroutine〕。这三个局部由位于新一行第一列的双百分号分开,因此,Lex输入文件的格式如下{definitions}%%{rules}%%{auxiliaryroutines}而且第一局部用"%{〞和"%}〞括起来。第一和第三个局部为C语言的代码和函数定义,第二个局部为一些规那么。定义正那么表达式如下ID=letterletter*NUM=digitdigit*Letter=a|…|z|A|…|ZDigit=0|…|9Keyword=else|if|int|return|void|whileSpecialsymbol=+|-|*|/|<|<=|>|>=|==|!=|=|;|,|〔|〕|[|]|{|}|/*|*/Whitespace="〞Enter=\n在lex中的构造letter[A-Za-z]digit[0-9]id({letter}|[_])({letter}|{digit}|[_])*error_id({digit})+({letter})+num{digit}+whitespace[\t]+enter[\n]+构造DFA图三、实验容Win7下lex与yacc的安装配置;利用ParserGenarator的词法分析器构造四、实验步骤Win7下lex与yacc的安装配置1、lex的安装首先,下载下载flex和bison.其次,安装完毕后,将c:\gnuwin32\lib里面的libfl.a和liby.a复制到C:\MinGW\lib里面。再者,设置环境变量。最后,测试安装是否成功。2、使用lex生成此法分析器:新建文本文件,更改名称为a.lex,敲入下面代码-------词法分析器的源代码%{intwordCount=0;intnumcount=0;%}chars[A-Za-z\_\'\.\"]numbers([0-9])+delim[""\n\t]whitespace{delim}+words{chars}+%%while{ECHO;printf("%s\n",yytext);}{words}{wordCount++;/*increasethewordcountbyone*/}{whitespace}{/*donothing*/}([0-9])+{numcount++;/*onemaywanttoaddsomeprocessinghere*/}%%voidmain(){printf("ok1\n");yylex();/*starttheanalysis*/printf("ok2\n");printf("Noofwords:%d\nnumber:%d\n",wordCount,numcount);return0;}intyywrap(){return1;}2、新建文本文件,更名为b.c,敲入下面代码--------此为输入源代码asdasdf23qa1b2!#while3、翻开菜单,运行,输入cmd。输入:cd文件夹路径输入:flexa.lex回车后生成一个文件输入:gcc-oalex.yy.c-lfl回车后生成一个a.exe文件,现在我们已得到了一个简易的词法分析器,下面就是运用次词法分析器,分析下b.c文件输入:a.exe<b.c>a.txt回车后生成一个a.txt文件利用ParserGenarator的词法分析器构造在Lex中的规那么定义构造定义识别保存字规那么"int"|"else"|"return"|"void"|"if"|"while"{Upper(yytext,yyleng);printf("%d行",lineno);printf("%sreservedword\n",yytext);}//保存字定义识别数字规那么{num}{printf("%d行",lineno);printf("%sNUM\n",yytext);}//数字定义识别专用符号规那么","|";"|"("|")"|"{"|"}"|"*"|"/"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"="|"/*"|"*/"{printf("%d行",lineno);printf("%sspecialsymbol\n",yytext);}//特殊符号定义识别标识符规那么{id}{printf("%d行",lineno);printf("%sID\n",yytext);}//标识符定义识别错误的字符串规那么当开头为数字的后面为字母的字符串时,是错误的标识符。{error_id}{printf("error:%s\n",yytext);}//以数字开头的字符自动报错定义忽略空格规那么{whitespace}{/*skipwhitespace*/}//忽略空格定义忽略回车规那么{enter}{lineno++;}//遇到回车自动加行号忽略辅助程序集中包括主函数main〔〕和辅助函数toupper〔〕。程序代码实现Lex代码//定义集,包括头文件和变量定义%{#include<ctype.h>#include<stdio.h>#include<string.h>#include<stdlib.h>intlineno=1;//定义行号%}//定义正那么表达式letter[A-Za-z]//字母digit[0-9]//数字id({letter}|[_])({letter}|{digit}|[_])*//开头为字母的标识符error_id({digit})+({letter})+//开头为数字的错误标识符num{digit}+//数字集合whitespace[\t]+//空格enter[\n]+//回车//定义识别规那么%%//识别保存字"int"|"else"|"return"|"void"|"if"|"while"{Upper(yytext,yyleng);printf("%d行",lineno);//打印行号printf("%sreservedword\n",yytext);}//输出保存字//识别数字{num}{printf("%d行",lineno);//打印行号printf("%sNUM\n",yytext);}//输出数字//识别专用符号","|";"|"("|")"|"{"|"}"|"*"|"/"|"+"|"-"|">"|"<"|">="|"<="|"=="|"!="|"="|"/*"|"*/"{printf("%d行",lineno);//打印行号printf("%sspecialsymbol\n",yytext);}//输出特殊符号//识别标识符{id}{printf("%d行",lineno);//打印行号printf("%sID\n",yytext);}//打印标识符//识别错误的标识符{error_id}{printf("%d行",lineno);printf("error:%s\n",yytext);}//以数字开头的字符自动报错//识别空格{whitespace}{/*skipwhitespace*/}//忽略空格//识别回车{enter}{lineno++;}//遇到回车自动加行号忽略%%//转换大小写Upper(char*s,intl){inti;for(i=0;i<l;i++){s[i]=toupper(s[i]);}}//将保存字变为大写//主函数main(void){//定义输入文件名变量charinfilename[400];printf("输入文件名:");scanf("%s",&infilename);yyin=fopen(infilename,"r");//读取文件printf("开场词法分析:\n");returnyylex();}测试过程及结果Win7下lex与yacc的安装配置测试安装是否成功,测试结果如下图,当前文件夹多了两个文件,安装成功:(2)利用ParserGenarator的词法分析器构造实验总结:通过本实验,我了解了Lex的用法,并构造了ParserGenarator编译器。成功将实例程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年事业单位考试综应范文合集
- 2026年江西省财政系统人员招聘考试备考试题及答案解析
- 2026年共青团考试常考题库附答案
- 2026年共青团入团命题方向题库含答案
- 保健食品监管试题及答案2025年版
- 2025山东莱商银行济南分行2025年校园招聘30人笔试历年参考题库附带答案详解
- 2025届安徽军工校园招聘笔试历年参考题库附带答案详解
- 2025孝感云梦县润泽农旅投资建设有限公司公开招聘6人笔试历年参考题库附带答案详解
- 2025中国邮政福建建省分公司校园招聘预笔试历年参考题库附带答案详解
- 药店员工三基三严考试题库及答案
- 2026年中小学生安全知识竞赛试题(附答案)
- 2026年安全管理人员安全培训考试题附答案
- 加速康复外科中国专家共识
- 2026年人教版七年级下册政治期末综合测评卷(含答案可下载)
- 2026年全国新高考1卷英语试卷(含答案及详解)
- 市场监督管理局特种设备安全监察工作手册(标准版)
- 护理个案查房:糖尿病足的预防与护理
- 高中数学必修一2.2基本不等式常见题型(含答案)
- 2026年衡阳市应急管理系统事业单位人员招聘考试备考试题及答案详解
- 生物化学试卷1
- 某锻造厂供配电系统设计
评论
0/150
提交评论