一个 yacc 处理的错误,请高手给予帮助
我的yacc代码如下(部分有意义的):
%union {
int intval;
char *strval;
}
%token TRANNO
%token SRVSTAN
%token DEVSTAN
%token SRVDATETIME
%token INFIELD
%token OUTFIELD
%token SUBSTR
%token FULLTIME
%token YMD
%token TIMEONLY
%token VALUEPLUS
%token STRCAT
%token INTNUM
%token STRING
%%
get_a_field: INFIELD { sprintf(chresult, "%s", yylval.strval); }
| OUTFIELD { sprintf(chresult, "12345678"); }
;
str_variable: TRANNO { sprintf(chresult, "%s", yylval.strval); }
| SRVSTAN { sprintf(chresult, "%s", yylval.strval); }
| DEVSTAN { sprintf(chresult, "%s", yylval.strval); }
;
%%
在yacc -v处理以后的output文件如下:
0 $accept : get_a_field $end
1 get_a_field : INFIELD
2 | OUTFIELD
3 str_variable : TRANNO
4 | SRVSTAN
5 | DEVSTAN
^L
state 0
$accept : . get_a_field $end (0)
INFIELD shift 1
OUTFIELD shift 2
. error
get_a_field goto 3
state 1
get_a_field : INFIELD . (1)
. reduce 1
state 2
get_a_field : OUTFIELD . (2)
. reduce 2
state 3
$accept : get_a_field . $end (0)
$end accept
Rules never reduced:
str_variable : TRANNO (3)
str_variable : SRVSTAN (4)
str_variable : DEVSTAN (5)
16 terminals, 3 nonterminals
6 grammar rules, 4 states
从中可以看到有3个规则从来没有被解析到,是为什么呢?
在实际生成的程序执行时,如果输入TRANNO,则会打印"syntax error“
请高手帮忙指点一下,多谢!