2 u013052928 u013052928 于 2016.02.28 23:11 提问

bison简易计算器 新手问题

最近看了flex bison,然后这个计算器结果一直是0,为什么。

这是1.l:
%{
# include "2.tab.h"
%}
%%
"+"         { return ADD; }
"-"         { return SUB; }
"*"         { return MUL; }
"/"         { return DIV; }
"|"         { return ABS; }
[0-9]+  {yylval=atoi(yytext); return NUMBER;}
 \t     {/* ignore whitespace */}
.       {printf("character %c\n",*yytext);}
\n      {return EOL;}

%%
int yywrap(void){
   return 0;
}


%{
#include <stdio.h>
int yylex (void);
void yyerror (char const *);
%}
/* declare tokens */
%token NUMBER
%token ADD SUB MUL DIV ABS
%token EOL
%%
calclist: /* nothing */ 
| calclist exp EOL { printf("= %d\n", $1); } 
;
exp: factor 
| exp ADD factor { $$ = $1 + $3; }
| exp SUB factor { $$ = $1 - $3; }
;
factor: term 
| factor MUL term { $$ = $1 * $3; }
| factor DIV term { $$ = $1 / $3; }
;
term: NUMBER 
| ABS term { $$ = $2 >= 0? $2 : - $2; }
;
%%
main(int argc, char **argv)
{
yyparse();
}
void yyerror(char const *s)
{
fprintf(stderr, "error: %s\n", s);
}


图片说明

1个回答

devmiao
devmiao   Ds   Rxr 2016.02.28 23:23
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
编译原理:用flex和bison实现一个简单的计算器
运用flex和bison工具实现一个简单的计算器,可以进行+、-、*、/等运算。 flex源代码格式: declarations %% translation rules %% auxiliary functions 语法分析器的自动构造: bison源代码格式: declarations %% translation rules %% supporting C rou
编译原理-用Bison构造语法分析程序-小小计算器
问题描述: 编译原理实验要求构造语法分析程序,实现一个简单计算器的功能 实现功能: 1,基本运算 a) 加、减、乘、除 b) 乘方、开方 c) 位运算:与、或、非 d) 阶乘运算 e) 三角函数运算 f) 可自定义变量并参与运算 2,输出对应于输入的后缀表达式(输入的是中缀表达式) 3,打印语法分析器构造的语法树 代码: 1,myCal.h 一个简单
编译原理--计算器Flex+Bison实现
编译原理试验程序计算器实现
用编译原理编写计算器程序中需要注意的问题
计算器程序有优先级。所以文法归于必须有先后顺序。也就是高优先级的先规约,低优先级的后规约。也就是在写文法时,见到高优先级便扩展。例如: -+在*/之后扩展Express = Express ‘+’ F | Express ‘-’ FF = T * T | T / T T = terminal 这就完事了吗?no...因为这样很有可能产生shift/reduce文法错
练习简易计算器
代码如下:/*  练习简易计算器*/import java.util.Scanner;class Demo12 { public static void main(String[] args)  { Scanner sc=new Scanner(System.in); System.out.println(&quot;请输入第一个数字:&quot;); int a=sc.nextInt(); System.o...
编译原理利用Flex+Bison实现简单计算器
编译原理利用Flex+Bison实现简单计算器
编译原理:用Flex和 Bison实现一个功能更为强大的计算器
 用Flex和 Bison实现一个功能更为强大的计算器,包含以下运算: a)  加、减、乘、除运算 b)  乘方、开方运算 c)  位运算       – 与 & 、或 |、非 ~... d)  阶乘运算 !   对数运算log 1.进一步完善计算器功能,实现对以下语法结构的分析。还可以进一步扩充功能。 12+23*
编译原理—(从零开始)用flex、bison实现一个简单的计算器
目标:参考范例程序, 用 Flex 和 Bison 实现一个功能更为强大的计算器,包含以下运算: a) 加、减、乘、除运算 b) 乘方、开方运算 c) 位运算 – 与 &amp;amp; 、或 |、非 ~… d) 阶乘运算 ! e)sin cos tan sin(SIN*pi/180.0)//把角度变成弧度即把180度变成π1. 首先 下载Ubuntu虚拟机并安装 http://blog.csdn.
编译原理实验-FLEX+BISON+DEV C++完美解决方案
某高校注明实验——flex+bison的dev c++环境下的完美使用解决方案
如何开启bison调式方式
当我们的文法设计的有问题的时候,就需要开启bison的调试方式来检测文法错在哪里,那么如何开启bison的调试方式呢? bison调式需要做的事情如下: 1 )在语法文件*.y定义段开启yydebug,最终如下: %{ #include #include #include int yydebug=1; %} 2)在编译语法文件*.y的时候,使用-v参数,生成output文件,这