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);}