打印

一个 yacc 处理的错误,请高手给予帮助

一个 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“

请高手帮忙指点一下,多谢!

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-7-6 21:16 京ICP证060528 号

Designed By 17DST