




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验四语法分析的yacc实现实验报告题目语法分析的yacc实现姓名及分工康黎明 SWE10029陈俊杰 SWE10031许冬青 SWE10033王吉 SWE10028日期2012-12-20一、实验目的:加深对语法分析器工作过程的理解;熟练掌握yacc工具。二、实验分工:小组成员共同分析实验过程,在老师的指导分析下,完成了完整的程序编码。三、程序说明:1 程序输入示例:测试程序保存成文件input.c,Yacc的main()函数从input.c读取字符并进行分析,将用到的文法规则输出输入C语言程序为: main() a = 10*(b+2);2程序输出示例运行Yacc
2、程序,输出窗口直接显示运行结果:4、 实验说明:编译环境说明:Windows下的Visual C+文法说明:0. program ® main() expression_stmt 1. expression_stmt ® expression ; | ;表达式语句有一个可选的且后面跟着分号的表达式。这样的表达式通常求出它们一方的结果。因此,这个语句用于赋值和函数调用。2. expression® var = expression | simple-expression3. var ® ID | ID expression 表达式是一个变量引用,后面跟着赋
3、值符号(等号)和一个表达式,或者就是一个简单的表达式。赋值的语义为:首先找到由变量var的地址,然后对赋值符右边的子表达式进行求值,再将子表达式的值存储到给定的地址。这个值也作为整个表达式的值返回。var是简单的整型变量或下标数组变量。需要检查下标值为非负,但不进行下标越界检查。建议:可实现var ® ID;根据实际情况实现var ® ID expression 数组变量的识别。4. simple-expression ® additive-expression relop additive-expression | additive-expression5. r
4、elop ® <= | < | > | >= | = |!=6. additive-expression ® additive-expression addop term | term7. addop ® + | - 8. term ® term mulop factor | factor9. mulop ® * | / 加法表达式和项表示了算术操作符的结合性和优先级。10. factor ® ( expression ) | var | NUM因子是围在括号内的表达式;或一个变量,求出其变量的值;或者一个函数
5、调用,求出函数的返回值;或者一个NUM,其值由词法分析器确定。其他说明:实验过程遇到的问题:1、.lex部分出现问题.|n应为分号(;),表示不做任何操作。2、delim为对Tab键做清除跳过操作。3、Yacc部分%nonassoc LOWER_THAN_ELSE ,%nonassoc ELSE;为消除歧义作用。4、%start program开始按照写好的文法对Input进行分析,并打印出每一条文法结果。5、 源程序:1、 Lex代码(读出token)%#include <string.h>#include <stdio.h>extern char* yylval;i
6、nt line_counter = 1;%letterA-Za-zdigit0-9numberdigit+delim" "t+keyword"main"|"while"|"if"|"else"|"for"|"break"|"continue"|"int"|"char"|"void"idletter(letter|digit)*%delim;main yylval = strdu
7、p(yytext); return MAIN; -+*/()=;.,>< return *yytext; id yylval = strdup(yytext); return ID; number yylval = strdup(yytext); return NUM; .|n;%int yywrap()return 1;2、yacc代码(语义分析)%#include <ctype.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define YYSTYPE cha
8、r*%start program%token ID NUM LE RE EQ NQ MAIN IF WHILE ELSE%nonassoc LOWER_THAN_ELSE / 消除歧义%nonassoc ELSE%program :MAIN'('')'''expression_stmt'' printf ("program->main() expression_stmt n" );expression_stmt :expression'' printf("expression_s
9、tmt->expression;n"); |'' printf("expression_stmt->n"); ;expression : var'='expression printf("expression->var = expressionn"); |simple_expression printf("expression->simple-expressionn"); ;var :ID printf("var->IDn"); |ID'
10、;'expression'' printf("var->IDexpressionn"); ;simple_expression :additive_expression relop additive_expression printf("simple-expression->additive-expression relop additive-expressionn"); |additive_expression printf("simple-expression->additive-expressio
11、nn"); ;relop :LE printf("relop-> <=n"); |'<' printf("relop-> <n"); |'>' printf("relop-> >n"); |RE printf("relop-> >=n"); |EQ printf("relop-> =n"); |NQ printf("relop-> !=n"); ;additive
12、_expression :additive_expression addop term printf("additive-expression->additive-expression addop termn"); |term printf("additive-expression->additive-expression addop term | termn"); ;addop :'+' printf("addop->'+'n"); |'-' printf("
13、;addop->'-'n"); ;term :term mulop factor printf("term->term mulop factorn"); |factor printf("term->factorn"); ;mulop :'*' printf("mulop->'*'n"); |'/' printf("mulop->'/'n"); ;factor :'('expression')' printf("factor->'('expression')'n"); |NUM printf("factor->NUMn"); |var printf("factor->varn"); ;%#include "lex.yy.c"int main() extern FILE *yyin; yyin=fopen("input.c","r");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 印刷企业市场调研方法考核试卷
- 家庭装饰画框批发考核试卷
- 园艺陶瓷的公共空间装饰效果考核试卷
- 印刷设备生产过程的智能化技术应用案例考核试卷
- 图书出租业务的服务标准化培训考核试卷
- 影视录放设备的智能镜头切换考核试卷
- 暖气施工合同范本
- 签订重大销售合同范本
- 口腔消毒培训课件
- 电商行业产品描述免责协议承诺书
- 兔子坡(阅读课上课课件)
- 高中数学《立体几何》教材分析及教学建议
- 八年级英语初中英语阅读理解阅读专项练习试卷附答案
- 固定资产清查盘点明细表
- 人教版八年级数学下册课件【全册】
- 物联网管理平台的设计与实现
- 1例妊娠糖尿病的个案护理
- 光伏发电职业病危害预评价方案方案
- 财务报表涉税分析
- 立式单轴木工铣床安全操作规程
- 重症患者识别课件
评论
0/150
提交评论