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

16人阅读 评论(0) 收藏 举报
分类:

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.y

Toa@DESKTOP-499IG24 ~
$ gcc y.tab.c -w

Toa@DESKTOP-499IG24 ~
$ ./a.exe
3+4*2*(2+3)
43

查看评论

c语法分析器--采用bison(yacc)

  • 2013年11月20日 16:36
  • 914KB
  • 下载

用Yacc实现语法分析器-4-编译原理

用Yacc实现语法分析器   一、实验目的 掌握语法分析器的构造原理,掌握Yacc的编程方法。   二、实验内容 用Yacc编写一个语法分析程序,使之与词法分析器结合,能够根据语言的上下文...
  • XuanZuoNuo
  • XuanZuoNuo
  • 2013-08-26 12:55:58
  • 2669

编译原理-用Bison构造语法分析程序-小小计算器

问题描述: 编译原理实验要求构造语法分析程序,实现一个简单计算器的功能 实现功能: 1,基本运算 a) 加、减、乘、除 b) 乘方、开方 c) 位运算:与、或、非 d) 阶乘运算 e) 三角函数运...
  • hexiaole1994
  • hexiaole1994
  • 2016-04-16 09:34:07
  • 2266

Yacc 和 Bison

From:http://www.ibm.com/developerworks/cn/linux/sdk/lex/index.htmlYacc Yacc 代表 Yet Another Compiler...
  • forlong401
  • forlong401
  • 2011-04-10 11:59:00
  • 5146

基于yacc实现的语法分析和语义分析

  • 2016年07月03日 17:15
  • 238KB
  • 下载

如何用flex+bison写语法分析器

http://my.oschina.net/costaxu/blog/107714  背景 这个星期,项目中要使用C++或C语言解析JSON格式的数据,把解析的结果放到一个通用的数据结...
  • cangyingzhijia
  • cangyingzhijia
  • 2013-03-18 08:07:19
  • 5106

利用lex和yacc做词法、语法分析

最近在一直做一个东西。设计一种脚本语言,再写一个翻译器,将这种脚本语言翻译成avr-gcc可以执行的C语言程序,再将得到的C语言程序利用avr-gcc编译器编译成Intel的hex文件格式,再写一个类...
  • u011000290
  • u011000290
  • 2016-03-25 21:48:27
  • 1905

编译原理利用Flex+Bison实现简单计算器

编译原理利用Flex+Bison实现简单计算器
  • xiaofeige567
  • xiaofeige567
  • 2014-06-03 21:38:03
  • 4147

实现语法分析器-编译原理

  • 2017年02月17日 20:26
  • 3.77MB
  • 下载

【编译原理】用Yacc做语法分析

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de...
  • xiaowei_cqu
  • xiaowei_cqu
  • 2012-07-23 05:47:53
  • 18337
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 1435
    排名: 3万+
    最新评论