YACC(Yet Another Compiler-Compiler)是一个LALR(1)分析器自动生成器,是贝尔实验室在UNIX上首次实现,与LEX有直接的接口。此外GNU(GNU is not UNIX)的Bison是对YACC的兼容性扩充。

YACC自动构造分析器的模式及作用图:

其步骤如下:

YACC源程序结构:

说明部分
%%
翻译规则
%%
用C语言编写的辅助例程

给出一个源程序:https://blog.csdn.net/u014708761/article/details/50153141

%{
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
%}
%token DIGIT
%%
line    :expr'\n' { printf("%d\n",$1);return;};
expr    :expr'+'term { $$=$1+$3;}|expr'-'term { $$=$1-$3;}|term;
term    :term'*'factor {$$=$1*$3;}|factor;
factor  :'('expr')' {$$=$2;}|DIGIT;
%%
main(){return yyparse();
}int yylex(){int c;while ((c=getchar())==' ');if(isdigit(c)){yylval=c-'0';return DIGIT;}return c;
}
int yyerror(char *s){fprintf(stderr,"%s\n",s);return 1;
}

我的运行环境是cygwin下的bison或yacc:

Toa@DESKTOP-499IG24 ~
$ yacc --version
bison (GNU Bison) 3.0.4
由 Robert Corbett 和 Richard Stallman 编写。版权所有 (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.Toa@DESKTOP-499IG24 ~
$ bison --version
bison (GNU Bison) 3.0.4
由 Robert Corbett 和 Richard Stallman 编写。版权所有 (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

编译与运行:

Toa@DESKTOP-499IG24 ~
$ yacc a.yToa@DESKTOP-499IG24 ~
$ gcc y.tab.c -wToa@DESKTOP-499IG24 ~
$ ./a.exe
3+4*2*(2+3)
43

编译原理:利用yacc/bison进行语法分析相关推荐

  1. [educoder] 用YACC(BISON)生成语法分析和翻译器

    [educoder] 用YACC(BISON)生成语法分析和翻译器 第一关 /* 逆波兰符号计算器 *//* 功能:能够计算出合法的后缀表达式的值,包括加法.减法.乘法.除法.乘方.取反等运算 *// ...

  2. java pl0 四元式,【编译原理】c++实现自下而上语法分析及中间代码(四元式)生成...

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  3. 编译原理—实验二LL(1)语法分析(一)

    一.实验目的 1.熟悉LL(1)语法分析的基本原理,语法分析的过程,以及语法分析中要注意的一些问题. 2. 复习高级语言及线性表.栈.图等典型数据结构,进一步加强用高级语言来解决实际问题的能力. 二. ...

  4. 编译原理-实验二-LL(1)语法分析程序的设计

    一.实验目的 了解LL(1)分析器的基本构成及用自顶向下的LL(1)方法对表达式进行语法分析的方法,掌握LL(1)语法分析程序的构造方法. 二.实验内容 根据LL(1)语法分析算法的基本思想,设计一个 ...

  5. 编译原理-实验四-LR(0)语法分析程序的设计

    一.实验目的 了解LR(0)语法分析算法的基本思想,掌握LR(0)语法分析程序的构造方法. 二.实验内容 根据LR(0)语法分析算法的基本思想,设计一个对给定文法进行LR(0)语法分析的程序,并用C. ...

  6. 编译原理复习(4)语法分析--自上而下分析

    语法分析--自上而下分析 语法分析器的功能 语法分析方法分类 自上而下分析法 自下而上分析法 LL(1)分析法 左递归的消除 消除回溯,提取公共左因子 求法,例FIRST(X): FOLLOW集构造方 ...

  7. 编译原理实验2(1)——自上而下语法分析

    一.实验目的 1.为初等函数运算语言构造LL(1)语法分析器. 2.掌握LL(1)语法分析器的方法,加深对自上而下语法分析原理的理解. 3.掌握设计.编制并调试LL(1)语法分析程序的思想和方法. 二 ...

  8. 编译原理(二)之语法分析

    采用实验1的简单语言,设计并实现含多条简单赋值语句的语法分析程序,要求采用算符优先的分析算法. 注意与实验1.2的衔接. using System; using System.Collections. ...

  9. 编译原理(4):语法分析(自上而下)

    上一篇说了词法分析这次说语法分析,这两部分是一脉相承的.(上一篇在这) 要进行语法分析,必须对语言的语法结构进行描述. 采用正规式和有限自动机可以描述和识别语言的单词符号: 用上下文无关文法(前面已经 ...

最新文章

  1. NHibernate 学习总结 开篇
  2. Apache日志配置
  3. 分享网页到微信朋友圈的官方接口
  4. 特岗招聘计算机专业要求,咨询特岗教师招聘专业设置问题
  5. 密钥--公钥、私钥方式
  6. WARNING:tensorflow:Entity <bound method GRUCell.call of <tensorflow.python.ops.rnn_cell_impl.GRUCell
  7. Java开发中遇到最难的问题!java定义list集合
  8. 乔安监控电脑客户端_公司上网监控使用安装电脑监控软件?
  9. 2.描述性统计的matlab 实现
  10. w10怎么修改dns服务器,Win10怎么修改DNS 如何把DNS设置为百度公共DNS
  11. Jmeter 使用详解、性能压测分析与性能优化思路
  12. 微信小程序开发工作流程
  13. 求解答!iframe在IE浏览器加载页面无反应问题
  14. 1588 1-Step 和 2-Step PTP 之间有什么区别?
  15. 错误代码1500什么意思_宽带出错出错提示代码是示什么意思
  16. python requests 异步调用_python - 如何使用requests_html异步获取()URL列表? - 堆栈内存溢出...
  17. 哪款蓝牙耳机玩吃鸡延迟低?四款低延迟游戏蓝牙耳机推荐
  18. 3、浙江移动网页Post登陆分析RSA算法【Post/Js逆向笔记】
  19. CoreIDRAW出现“尝试重新启动计算机和应用程序...”问题解决方案
  20. 特网云服务器 WindowsServer2012 关闭IE增强机制

热门文章

  1. redis学习-redis入门概述及简介
  2. Djang drf:APIView源码分析
  3. vue 项目中当访问路由不存在的时候默认访问404页面
  4. NOIP2013D1T3货车运输(最大生成树+倍增lca)
  5. thinkphp下载远程图片到本地
  6. android webview远程调试
  7. iOS在支持arc的工程中,导入不支持arc的第三方的插件
  8. python编写win 本地reader程序_使用Python、win32api和Acrobat Reader 9打印PDF
  9. java 内存泄露 jmap_jmap命令 检查内存泄漏
  10. 若某计算机字长为16位,题目来源于王道论坛 某计算机字长为16位,主存地址空间...