2013-02-28 77 views
2

我想写一个计算器也不是表达式,如“真假”。这里是我的.L文件:Flex野牛计算器不打印结果

%{ 
#include <stdlib.h> 
#include "y.tab.h" 
%} 

%% 
"true"    {yylval=1; return BOOLEAN;} 
"false"    {yylval=0; return BOOLEAN;} 
"nor"    {return NOR;} 
" "     { } 
.     {return yytext[0];} 

%% 

int main(void) 
{ 
    yyparse(); 
    return 0; 
} 

int yywrap(void) 
{ 
    return 0; 
} 
int yyerror(void) 
{ 
    printf("Error\n"); 
} 

这里是我的.Y文件:

/* Bison declarations. */ 
%token BOOLEAN 
%token NOR 
%left NOR 
%% /* The grammar follows. */ 

input: 
    /* empty */ 
    | input line 
    ; 

line: 
    '\n' 
    | exp '\n' {printf ("%s",$1); } 
    ; 

exp: 
    BOOLEAN  { $$ = $1;} 
    | exp NOR exp { $$ = !($1 || $3); } 
    | '(' exp ')' { $$ = $2;} 
    ; 
%% 

的问题是,当我进入像“真也不假”的表情,我看不出有什么结果被打印出来。任何人都知道什么是错的?

+0

野牛甚至编译它吗?好像你在'line'的定义中有一个语法错误。 – StoryTeller 2013-02-28 17:04:06

+0

是的,它的确如此。我不小心在这里发布了一个语法错误,但是在原始代码中没有。 – 2013-02-28 17:27:37

回答

2

printf ("%s",$1); 

尝试在地址01打印一个字符串。你的意思可能是

printf ("%d",$1); 
+0

甚至'print($ 1?“true”:“false”);' – vonbrand 2013-02-28 19:38:22

+0

(奇怪它没有炸毁...) – vonbrand 2013-02-28 19:38:56