资源描述:
《词法分析器lex实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Xxxxx大学xxxxxx学院实验报告学号:xxxxxxxx姓名:xxx专业:计算机科学与技术班级:xxxxx第周课程名称编译原理课程设计 实验课时实验项目基于Lex的词法分析器实验时间实验目的1.学习基于Lex构造词法分析器的方法。2.学习CMinus的词法结构。实验环境ParserGeneratorVC++6.0实验内容(算法、程序、步骤和方法)1.基于Lex构造词法分析器的方法1.1Lex文件格式Lex文件分成三个部分,分别为definitions、rules以及auxiliaryroutines,中间用%%分割开。Definitions包括要加入到生成的C程序的头部的代码
2、,包括#include语句、#define语句及一些全局变量的定义。同时,正则表达式可以在这个部分定义,如identifier的定义:letter[_a-zA-Z]identifier{letter}{letter}*rules部分定义,它包括一串正则表达式或字符,后面加上当表达式识别出后,采取的动作。Auxiliary部分包括rules部分使用的一些辅助函数,同时,main函数也在其中定义。1.2CMinus词法CMinus中的Token包括保留字、特殊符号、ID和NUM、以及注释,其中,保留字和特殊符号的形式是固定的,可以在Lex中直接以字符串的形式给出,而ID和NUM可以由
3、复数种形式,并具有正则表达式:ID=letterletter*NUM=digitdigit*letter=a
4、..
5、z
6、A
7、..
8、Zdigit=0
9、..
10、9因此这四个Symbol在Lex中给出正则表达式。注释部分进行如下处理:如果识别出字符串“/*”则一直读入字符,知道遇到了*,如果一直遇到“*”则一直读入字符,如果遇到“/”则结束,否则继续等待“*”。1.2数据结构Token具有两个值,包括其类型TokenType和值TokenValue。因此定义一个enum枚举类型来表示Token类型。typedefenum{/*keywords*/ELSE,IF,INT,RETURN,VO
11、ID,WHILE,/*pecialsymbols*/ADD,SUBTRACT,MULTIPLY,DIVIDE,LESS,LE,GREATER,GE,EQUAL,ASSIGN,NE,SEMICOLON,COMMA,LPARENTHESIS,RPARENTHESIS,LCURVE,RCURVE,LBRACKET,RBRACKET,/*COMMENTS*/LCOMMENT,RCOMMENT,/*IDandNUM*/ID,NUM,/*whitespace*/WHITESPACE,NEWLINE,/*error*/ERROR,/*empty*/EMPTY,/*unknown*/UNKNOW
12、N,/*end*/END}TokenType;并定义一个char*TokenValue来记录值在Lex中,每识别出来一个Token,返回其对应的枚举值即可,yytext中存储的既是Token对应的value值,将其复制到TokenValue中即可。数据记录和计算实验源程序:/*aprogramtoperformselectionsortona10elementarray.*/intx[10];intminloc(inta[],intlow,inthigh){inti;intx;intk;k=low;x=a[low];i=low+1;while(i13、{x=a[i];k=i;}}returnk;}结论(结果){VOID,'void'}{ID,'sort'}{LPARENTHESIS,'('}{INT,'int'}{ID,'a'}{LBRACKET,'['}{RBRACKET,']'}{COMMA,','}{INT,'int'}{ID,'low'}{COMMA,','}{INT,'int'}{ID,'high'}{RPARENTHESIS,')'}{LCURVE,'{'}{INT,'int'}{ID,'i'}{SEMICOLON,';'}{INT,'int'}{ID,'k'}{SEMICOLON,';'}{ID,'i'}{ASS
14、IGN,'='}{ID,'low'}{SEMICOLON,';'}{WHILE,'while'}{LPARENTHESIS,'('}{ID,'i'}{LESS,'<'}{ID,'high'}{SUBTRACT,'-'}{NUM,'1'}{RPARENTHESIS,')'}{LCURVE,'{'}{INT,'int'}{ID,'t'}{SEMICOLON,';'}{ID,'k'}{ASSIGN,'='}{ID,'minloc'}{LPARENTHESIS,'('}{ID,'a'}{