当前位置: 首页 > news >正文

苏州市城乡建设局网站小程序科技有限公司

苏州市城乡建设局网站,小程序科技有限公司,wordpress插件文件不存在,用vs代码做网站文章目录 实验环境准备复现实验例子分析总的文件架构实验任务 什么是Yacc Yacc(Yet Another Compiler Compiler)是一个语法分析程序自动生成工具,Yacc实验通常是在编译原理相关课程中进行的实践项目,旨在让学生深入理解编译器的语法分析阶段以及掌握Yac…

文章目录

        • 实验环境准备
        • 复现实验例子
        • 分析总的文件架构
        • 实验任务

什么是Yacc

  • Yacc(Yet Another Compiler Compiler)是一个语法分析程序自动生成工具,Yacc实验通常是在编译原理相关课程中进行的实践项目,旨在让学生深入理解编译器的语法分析阶段以及掌握Yacc工具的使用
实验环境准备
  • 安装Yacc,(安装包可通过解压学习通下载的压缩包得到)

在这里插入图片描述

  • 全称一股脑下载即可,注意的是下载的路径和先前下载的MinGW的路径一致,我下载bison的时候默认的路径就是我下载MinGW的路径了,所以直接默认即可

在这里插入图片描述

  • 对于安装MinGWFlex以及配置环境变量,在Flex工具实验中以及配置完成,这里就不需要重复配置 ,如果还没配置完成,可以查看我先前的博客 编译原理 实验二 词法分析程序自动生成工具实验
复现实验例子
  • 实验名称:实验名称:结合flex工具实现简单表达式求值

Step 1:使用文本编辑器输入构词规则序列,文件名为token.l,格式见LEX工具实验。

%{
#include "expr.tab.h"
%}%%
"q"   return STOP;
"("   return LP;
")"   return RP;
"\+"  return PLUS;
"\-"  return MINUS; 
"\*"  return MUL; 
"\/"  return DIV;[0-9]+ {yylval=atoi(yytext); return DIGIT;} 
%%

运行命令:

flex token.l
  • 得到文件lex.yy.c

在这里插入图片描述

Step 2:使用文本编辑器输入上下文无关文法,文件名为expr.y。

  • expr.y文件
%{
#include <stdio.h>
%}%token DIGIT STOP LP RP PLUS MINUS MUL DIV%% 
start : expr STOP {printf("expr=%d\n", $1); exit(1);}
;
expr:expr PLUS expr {$$=$1+$3;}
|expr MINUS expr {$$=$1-$3;}
|expr MUL expr {$$=$1*$3;}
|expr DIV expr {$$=$1/$3;}
|LP expr RP {$$=$2; }
|DIGIT {$$=$1; }
;
%%main(){printf("Type something followed by Return. Type 'q' to end.\n");printf("\n");return(yyparse());          /* Start the parser */
}yyerror(s)
char *s; {printf("yacc error: %s\n", s);
}yywrap(){return(0);
}

运行命令

bison -d expr.y
  • 得到文件expr.tab.c。如果调用bison(YACC)时使用『-d』选项,那么它们会输出到expr.tab.h中。

在这里插入图片描述

Step 3: 得到语法分析程序

运行命令

gcc  lex.yy.c  expr.tab.c  -o  expr
  • 得到可执行文件expr.exe,即语法分析程序

在这里插入图片描述

Step 4:使用语法分析程序分析输入文件

运行命令(下面的命令是CMD命令)

expr  <b.c>  a.txt

给出对应的PowerShell的等价运行指令

Get-Content b.c | expr > a.tx

在这里插入图片描述

当然,也可以通过命令行接收输入,直接运行expr程序即可

expr

在这里插入图片描述

  • 得到输出文件a.txt
分析总的文件架构

在这里插入图片描述

  • token.lFlex词法分析文件,定义词法规则,用于识别输入的token,每一个规则对应一个动作,返回相应的token类型
  • lex.yy.cFlex生成的C源文件,包含词法分析器的具体实现、输入缓冲区管理、模式匹配代码
  • expr.yYacc/Bison语法文件,定义语法规则和语义动作
  • expr.tab.hBison生成的头文件,供词法分析器使用的接口文件
  • expr.tab.cBison生成的C源文件
  • expr.exe:最终得到的语法分析程序
  • b.c:测试文件
  • a.txt:最终结果输出文件

文件之间的关系

1. token.l -(flex)-> lex.yy.c
2. expr.y -(bison)-> expr.tab.c + expr.tab.h
3. token.l 包含 expr.tab.h 以使用token定义
4. 最终所有.c文件被编译链接成可执行文件

工作流程

1. 词法分析器(lex.yy.c)读取输入,识别token
2. 语法分析器(expr.tab.c)根据语法规则构建语法树
3. 在归约过程中执行语义动作,计算表达式值
4. 最终输出计算结果
实验任务

在这里插入图片描述

任务1:根据expr.y所定义的文法,写出对应的无二义性的文法,设计输入验证这个原本的二义性文法的错误,以及你的无二义性文法的正确性

  • 原始的expr.y所定义的文法
%% 
start : expr STOP {printf("expr=%d\n", $1); exit(1);}
;
expr:expr PLUS expr {$$=$1+$3;}
|expr MINUS expr {$$=$1-$3;}
|expr MUL expr {$$=$1*$3;}
|expr DIV expr {$$=$1/$3;}
|LP expr RP {$$=$2; }
|DIGIT {$$=$1; }
;
%%
  • Yacc/Bison中,运算符的优先级和结合性遵循以下规则
- 在同一层级的产生式中,先出现的规则优先级较低
- 所以在当前文法中从上到下优先级依次增加:1. expr PLUS expr  (最低)2. expr MINUS expr3. expr MUL expr4. expr DIV expr   (最高)

显而易见!!!

  • 既然老师让我们写出对应的无二义性文法,所以上面的那个肯定是有二义性的,那么具体怎么改,直接GPT
  • 但是我们要写出测试用例证明这个是错的,在这里,我稍微给一点提示(a-b-ca/b/c)就是连续的减和连续的除法可以验证上面的文法是错误的,上面的a,b,c大家可以替换为具体的数字进行测试,但是为了让老师看出我们确实是思考的,可以把对应的a,b,c数字不要简单弄个1,2,3之类的

任务2:自行设计无二义性文法

  • 这个大家就自行设计啦!!!
http://www.dtcms.com/a/514276.html

相关文章:

  • 广州手机网站建设工信部网站备案信息查询
  • 可以用来做视频网站的视频外链吗wordpress手机登录跳转页面
  • 网页 网站 站点的区别网站上传文件功能实现
  • 购买网站服务如何做支出备案域名被拿去做违法
  • 互联网企业网站模板网站空间多少钱一年
  • 用ps做网站网页中国嘉兴门户网站
  • 贵阳建设网站培训辽宁建设工程信息网注册流程
  • vps 网站备案WordPress缓存插件开发
  • 零基础学jsp网站开发wordpress autopost
  • 个人网站不备案可以吗平面设计专业课程有哪些
  • 北京兼职做网站推广wap网站制作开发公司
  • 山东省建设工程管理局网站大学做html个人网站素材
  • 做网站需要买ip地址吗华为公司邮箱是多少
  • 网站建设外文版政策文件福州设计公司排名
  • 手机上怎样制作网站优化设计答案五年级下册
  • 苏州做网站公司怎么样云优化网站建设
  • 烟台做网站要多少钱秦皇岛海三建设没钱了
  • 怎样自学网站开发网页模版素材
  • 阿里云 网站根目录wordpress 页面 文章 区别
  • 临时域名用于网站调试万泉河网站建设
  • 做营销看的网站有哪些购物网站的建设的好处
  • 杭州网站建设商城价格咨询公司注册经营范围
  • 网站建设中哪些最重要性湖北省和住房建设厅官方网站
  • 如何仿网站模板怎么查看网站有没有做推广
  • 网站做系统叫什么东莞中小型网站建设
  • 澄海玩具网站建设公司网络平台贷款还不了会有什么后果
  • 网站建设要实现的目标万户网络技术有限公司官网
  • 订做网站建设宁波seo的公司联系方式
  • 四川建设厅网站登录不上咋办企业所得税怎么做账
  • 单品电商网站建设WordPress代码与tp代码