欢迎来到天天文库
浏览记录
ID:50380653
大小:185.50 KB
页数:11页
时间:2020-03-08
《实验四用语法分析器生成工具实现语法分析器.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
此文档下载收益归作者所有