实验四用语法分析器生成工具实现语法分析器.doc

实验四用语法分析器生成工具实现语法分析器.doc

ID:50380653

大小:185.50 KB

页数:11页

时间:2020-03-08

实验四用语法分析器生成工具实现语法分析器.doc_第1页
实验四用语法分析器生成工具实现语法分析器.doc_第2页
实验四用语法分析器生成工具实现语法分析器.doc_第3页
实验四用语法分析器生成工具实现语法分析器.doc_第4页
实验四用语法分析器生成工具实现语法分析器.doc_第5页
资源描述:

《实验四用语法分析器生成工具实现语法分析器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、魏陈强23020092204168实验4用语法分析器生成工具实现语法分析器一、实验目的掌握移进-归约技术语法分析技术,利用语法分析器生成工具Yacc/Bison实现语法分析器的构造。二、实验内容利用语法分析器生成工具Yacc/Bison编写一个语法分析程序,与词法分析器结合,能够根据语言的上下文无关文法,识别输入的单词序列是否文法的句子。源语言的文法定义见教材附录A.1,p394,要求实现完整的语言。三、实验要求1.个人完成,提交实验报告。2.实验报告中给出采用测试源代码片断,及其对应的最右推导过程(形式可以自行考虑)。例如,程序片断四、实验思路本实验在li

2、nux环境下编写。首先使用lex工具,编写词法分析器,对于识别出的token,比如id类的,则return(ID);单个字符的,比如‘>’,则return(‘>’),其他类似。然后生成lex.yy.c文件。接着使用yacc工具,编写语法分析器,在*.y文件中调用#include”lex.yy.c”,main(intargc,char**argv)函数中调用yyparse(),并给出yyerror()的处理方式。这样,就能将lex和yacc结合起来。生成y.tab.c文件后,gcc编译,生成a.out可执行文件。执行./a.out<1.txt,即可对1.txt

3、文档中的程序进行语法分析。五、详细代码1)lex.l%optionnoyywrap%{#include#include#include#include%}delim[t]ws{delim}+letter[A-Za-z]digit[0-9]%%{ws}{}"if"{printf("IF");return(IF);}"else"{printf("ELSE");return(ELSE);}"int"{printf("INT");return(BASIC);}"float"{print

4、f("FLOAT");return(BASIC);}"break"{printf("BREAK");return(BREAK);}"do"{printf("DO");return(DO);}"while"{printf("WHILE");return(WHILE);}"true"{printf("TRUE");return(TRUE);}"index"{printf("INDEX");return(INDEX);}"bool"{printf("BOOL");return(BASIC);}"char"{printf("CHAR");return(BASIC);

5、}"real"{printf("real");return(REAL);}"false"{printf("FLASE");return(FALSE);}[a-zA-Z_][a-zA-Z0-9_]*{printf("ID");return(ID);}[+-]?[0-9]+{printf("NUM");return(NUM);}[+-]?[0-9]*[.][0-9]+{printf("NUM");return(NUM);}"<"{printf("LT");return('<');}"<="{printf("LE");return(LE);}"="{printf(

6、"=");return('=');}"=="{printf("EQ");return(EQ);}"!="{printf("NE");return(NE);}">"{printf("GT");return('>');}">="{printf("GE");return(GE);}"+"{printf("+");return('+');}"-"{printf("-");return('-');}"["{printf("[");return('[');}"]"{printf("]");return(']');}"{"{printf("{");return('{');

7、}"}"{printf("}");return('}');}"("{printf("(");return('(');}")"{printf(")");return(')');}";"{printf(";");return(';');}","{printf(",");return(',');}"&&"{printf("&&");return(AND);}"

8、

9、"{printf("

10、

11、");return(OR);}%%2)yacc.y%{#include#include%}%tokenNUM%tokenID%tokenIFWH

12、ILEDOBREAKREALTRUEFALSEBAS

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。