实验四 学习YACC并构造简单语法分析程序.doc
上传人:sy****28 上传时间:2024-09-13 格式:DOC 页数:4 大小:29KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

实验四 学习YACC并构造简单语法分析程序.doc

实验四学习YACC并构造简单语法分析程序.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验四学习YACC并构造简单语法分析程序一、实验目的学习使用辅助软件YACC理解语法分析程序的构造原理结合LEX和YACC构造建立的解释程序二、实验内容构造一个PL/0程序的命令行简易版本程序,要求具有变量和常量定义语句Var和Const,具有基本输入输出语句Read和Write,包含基本的算术运算+、-、*、/和()运算,语句以分号(;)结束,整个程序以END结束。1学习YACC语法的使用具体内容可参考课本附录C的介绍2使用LEX构造词法分析程序yylex.c示例代码:\+{return'+';}\*{return'*';}":="{returnBECOMES;}\,{return',';}\;{return';';}VAR|var{returnVAR;}[a-zA-Z][a-zA-Z0-9]*{strcpy(yylval.str,yytext);returnIDENT;}3使用YACC构造语法分析程序构造符合YACC语法的程序PL0.YAC示例代码:%union{charstr[MAXSTRLEN];intnum;}%tokenVARCONSTREADWRITEEXITBECOMES%token<num>NUMBER%token<str>IDENT%type<num>number%type<str>ident%type<num>expression%left'+''-'%left'*''/'%leftUMINUS%%begins:/*empty*/|beginsprogram;program:var_state';'|const_state';'|statement';'|error';'{};var_state:VARvar_list{};var_list:a_var_list|var_list','a_var_list{};a_var_list:ident{i=position($1);if(i)printf("Error:variable(%s)alreadydefines\n",$1);else{if(tx==MAXTABLESIZE)printf("Error:tablefull(only%dnumbers),varibledefineerror\n",MAXTABLESIZE);else{strcpy(table[tx].name,$1);table[tx].kind=VARLABEL;printf("variable(%d):%ssuccessfulltdefined.\n",tx,$1);tx++;}}};statement:write_state|read_state|value_state|exit_state';'write_state:WRITE'('write_list')'{if(debug)printf("(write_statementfinished)\n");};write_list:a_write|write_list','a_write;a_write:expression{printf("%d\n",$1);}%%#include"lexyy.c"intyyparse();main(){returnyyparse();}4生成目标代码并运行1)生成C语言源程序在DOS命令提示符下运行YACC.exeYACCpl0.yac产生C语言代码pl0.C2)进入TC集成环境将.C文件编译产生可执行文件.EXETCpl0.C3)在DOS命令提示符下执行生成的pl0.exe输入程序示例如下:Consta=3;Varb,c;Read(b);c:=a+b;Write(c);END.三、实验报告按照语法分析的原理,给出借助YACC自动生成语法分析器的过程描述,和生成的语法分析程序是如何运作的。四、思考题YACC所依据的文法是什么?YACC本身是一个语法分析程序吗?察看YACC生成的源程序,理解自下而上分析方法的构造原理