linux 卸载 bison,linux下的bison报错,

linux下的bison报错,求高手指教!急

想用flex+bison写个简单的编译器,生成三地址中间代码。结果bison的编译就一堆警告。。。大概是说定义的文法没有用之类的。

这个是flex文件

%option noyywrap nodefault yylineno

%{

#include "compiler.h"

#include "parsing.tab.h"

%}

%%

"+" |

"-" |

"*" |

"/" |

"=" |

";" |

"(" |

")" |

"{" |

"}"{ return yytext[0];}

">"     { yylval.cmp = 1; return CMP; }

"

"!="    { yylval.cmp = 3; return CMP; }

"=="    { yylval.cmp = 4; return CMP; }

">="    { yylval.cmp = 5; return CMP; }

"<="    { yylval.cmp = 6; return CMP; }

"if"    { return IF; }

"else"  { return ELSE; }

"while" { return WHILE; }

"do"    { return DO; }

"break" { return BREAK;}

"&&"{ return AND;}

"||"{ return OR;}

"int"{ yylval.type=1; return TYPE;}

"float"{ yylval.type=2; return TYPE;}

"bool"{ yylval.type=3; return TYPE;}

[0-9]+{ yylval.i=atoi(yytext); return INTEGER;}

[0-9]+"."[0-9]*{ yylval.d=atof(yytext); return FLOAT;}

"true" |

"false" { yylval.b=strdup(yytext); return BOOLEAN;}

[a-zA-Z][a-zA-Z0-9]*  { yylval.s = lookup(yytext); return ID; }

"//".*

[ \t\n]

.{ yyerror("error input %c\n",*yytext);}

%%

这个是bison文件,所有的警告都在这里

%{

#include 

#include 

#include "compiler.h"

%}

%union{

struct ast *a;

double d;

int i;

char * b;

struct symbol *s;

int cmp;

int type;

}

%token  INTEGER

%token  FLOAT

%token  BOOLEAN

%token  ID

%token EOL

%token IF ELSE WHILE DO BREAK

%token AND OR

%token  TYPE

%nonassoc  CMP

%right '='

%left '+' '-'

%left '*' '/'

%type  block

%type  decls decl type

%type  stmts stmt loc bool

%type  join equality expr term unary factor

%start calclist

%%

block: '{' decls stmts '}'{ $$=$3;}

;

decls: decls decl

;

decl: type ID ';'

;

type: type '[' INTEGER ']'

| TYPE { $$=newast('X',S1,NULL);}

;

stmts: stmts stmt{ $$=newast('C',$1,$2);}

;

stmt: loc '=' bool ';'{ $$=newast('=',$1,$3);}

| IF '(' bool ')' stmt { $$=newflow('I',$3,$5,NULL);}

| IF '(' bool ')' stmt ELSE stmt{ $$=newflow('I',$3,$5,$7);}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值