资源描述:
《0943041331陈珂编译原理课程设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理课程设计实验报告实验一C•语言的词法分析器(基于LEX)实验二手工构造C■语言的词法分析器(表驱动实现)实验三c■语言的语法分析器(基于Yacc)实验四c■语言的语法分析器(手工实现LL1实现)实验一C•语言的词法分析器(基于LEX)目的••熟悉C■语言的各种Token,构造各种Token的正规表达式。熟悉ParserGererator2及其环境,学习基于LEX构造词法分析器的方法。意戈:设计词法分析所需的各种数据结构,理解词法分析的原理,为本套实验的后续实验―手动词法分析、语法分析做铺垫。基于LEX的词法分析器构造方法:Lex的输入结构{def
2、initions}〃声明部分%%{rules}〃识别规则%%{anxiliaryroutines}//辅助过程在声明部分,声明程序将要用到的函数、数据结构等,包括所调用的函数库,所定义的c-Token类型等。在识别规则部分,确定c-语言的Token类型,构造各Token的正规表达式。在辅助过程部分,函数实现c-程序的输入,并函数打印当前tokenoLex示意图如I下:lexsourcefileInputstreamsequenceoftokensc•语言词法分析的设计:重要数据结构1)c・惯用的词法⑴关键字:elseifintreturnvoidwhil
3、e(2)专用符号:+-*/<<=>>===;,0[J{}/**/(3)TD和NUM:IDNUMletterdigit(4)空格:空白、{letter}+{digit}+[a-zA-Z][0-9]换行符、制表符newlinewhitespace[t]+(5)注释:/**/2)c•的Token类型结构体:typedefenmu{//系统保留tokenENDFILE,ERROR,〃六个关键字reservedwordsIF,ELSE,INERETURN,VOID,WHILE,〃两个其它tokenIDNUMID,NUM〃专用符号21个specialsymbo
4、lASSIGN,EQ,NEQ,LT,LQ,GTGQ,COMMA,PLUS,MINUS,TIMESQVER〃分号LPAREN,RPAREN,SEIVII,BRL〃中括号,BRR,DAZUO,DAYOU,COMMENT,UNKNOWTOKEN}TokenType3)token识别规则:c・词法规则的定义"else"{printf("keyword"if"{printf("keyword"int"{printf("keyword"return"{printf("keyword"void"{printf(Mkeyword"while"{printff'keywo
5、rd->%s",yytext);returnELSE;}->%syytext);returnIF;}->%s"zyytext);returnINT;}->%s"/yytext);returnRETUEN;}->%s",yytext);returnVOID;}->%s"/yytext);returnWHILE;}//SPECIALSYMBOLSll^ll{pnntf(Nspecialsymbols->%sM,yytext);returnPLUS;}IIII{printff'specialsymbols->%s,,,yytex
6、t);returnMINUS;}h*ii{printff'specialsymbols->%sH,yytext);returnTIMES;}iiynii^ii{printf(Hspecialsymbols->%s,,/yytext);returnDIVI;}{printf(Nspecialsymbols->%sM,yytext);returnLT;}fl^ll{printf(”specialsymbols->%s蔦yytext);returnGT;},,>=n{printf「specialsymbols->%sf,,yytext);r
7、eturnGQ;}{printf(”specialsymbols・>%s,,/yytext);returnEQ;}u■{prjntf("specialsymbols・>%s舄yytext);returnNEQ;}{printf「specialsymbols%s",yytext);returnASSIGN;}IIJI/{printf「specialsymbols%s"zyytext);returnSEMI;}IIIt9{printf「specialsymbols->%s,l/yytext);returnCOMMA;]ll
8、ll{prin
9、tf「specialsymbols・>%s"/yytext);returnL