【发布时间】:2018-12-18 16:07:09
【问题描述】:
我一直在尝试编译我的 Bison 代码,但我的代码似乎有问题,但我就是不知道为什么或在哪里。
这是我的野牛代码,我在 OSX 上运行 GNU Bison 2.3。 我收到的错误是:
romans.y:9.9-21:语法错误,意外字符串,期待 =
这是一个我似乎没有在我的 Linux 机器上但在 OSX 机器上收到的错误
%{
// file created via echo
# include <stdio.h>
# include <stdlib.h>
int yyerror(char *s);
int yylex();
int yyparse();
%}
%output "roman.tab.c"
%token ARABIC_NUMERAL;
%token EOL
%%
calclist: /* nothing */ {}
| calclist arabic_numerals EOL { printf("%d\n", $2); }
;
arabic_numerals: ARABIC_NUMERAL
| ARABIC_NUMERAL { $$ = $$ + $2; }
;
/* ones:
| ONE {$$ = 1;}
| ONE ONE {$$ = 2;}
| ONE ONE ONE {$$ = 3;}
;
fives:
| FOUR {$$ = 4;}
| FIVE {$$ = 5;}
| FIVE ones { $$ = 5 +$2;}
;
tens:
| TEN {$$ = 10;}
| TEN TEN { $$ = 20;}
| TEN TEN TEN { $$ = 30;}
| TEN fives { $$ = 10 + $2}
| NINE { $$ = 9}
;
fifties:
| FIFTY { $$ = 50;}
|
:*/
%%
void yyerror(char *s)
{
printf("error: %s\n", s);
exit(0);
}
int
main()
{
// yydebug = 1;
yyparse();
return 0;
}
我的代码基于我的教授给我的一个程序,如下所示。当我尝试自己编译它时,我遇到了完全相同的问题。是不是我系统的bison版本有问题?
%{
# include <stdio.h>
# include <stdlib.h>
void yyerror(char *s);
int yylex();
int yyparse();
%}
%output "brackets.c"
%token OP CP N EOL
%%
calclist: /* nothing */ {}
| calclist expr EOL { printf("Input conforms to grammar\n"); }
;
//expr: N N N { }
//;
expr: OP expr CP
| N
;
%%
void yyerror(char *s)
{
printf("error: %s\n", s);
}
int
main()
{
// yydebug = 1;
yyparse();
return 0;
}
【问题讨论】:
-
指出错误在哪一行总是好的,因为野牛会告诉你(甚至告诉你哪一列的位置)。
-
@rici romans.y:9.9-21:语法错误,意外字符串,期待 =
标签: parsing compiler-construction bison flex-lexer