

 
error.y.
En el se muestra el tercer caso x:y{Ty} con 
x = list, T = , e y = NUMBER:
%{
#include <stdio.h>
void put(double x);
void err(int code); 
%}
%union { 
  double val; 
}
%token <val>NUMBER
%%
command 
  : 
  | command list '\n' { yyerrok; } 
  ;
list 
    : NUMBER            { put($1); }
    | list ',' NUMBER   { put($3); yyerrok; }
    | error             { err(1); }
    | list error        { err(2); }
    | list error NUMBER { err(3); put($3); yyerrok; }
    | list ',' error    { err(4); }
    ;
    
%%    
void put(double x) {   
  printf("%2.1lf\n",x);
}
void err(int code) {
  printf("err %d\n",code);
}
main() {
  yydebug = 1;
  yyparse();
}
yyerror(char *s) {
  printf("%s\n",s);
}
yacc da lugar a una tabla ligeramente diferente
de la producida por bison.
El fichero y.output contiene la tabla:
0 $accept : command $end 1 command : 2 | command list '\n' 3 list : NUMBER 4 | list ',' NUMBER 5 | error 6 | list error 7 | list error NUMBER 8 | list ',' error state 0 $accept : . command $end (0) command : . (1) . reduce 1 command goto 1 state 1 $accept : command . $end (0) command : command . list '\n' (2) $end accept error shift 2 NUMBER shift 3 . error list goto 4 state 2 list : error . (5) . reduce 5 state 3 list : NUMBER . (3) . reduce 3 state 4 command : command list . '\n' (2) list : list . ',' NUMBER (4) list : list . error (6) list : list . error NUMBER (7) list : list . ',' error (8) error shift 5 '\n' shift 6 ',' shift 7 . error state 5 list : list error . (6) list : list error . NUMBER (7) NUMBER shift 8 error reduce 6 '\n' reduce 6 ',' reduce 6 state 6 command : command list '\n' . (2) . reduce 2 state 7 list : list ',' . NUMBER (4) list : list ',' . error (8) error shift 9 NUMBER shift 10 . error state 8 list : list error NUMBER . (7) . reduce 7 state 9 list : list ',' error . (8) . reduce 8 state 10 list : list ',' NUMBER . (4) . reduce 4 5 terminals, 3 nonterminals 9 grammar rules, 11 states
> error
yydebug: state 0, reducing by rule 1 (command :)
yydebug: after reduction, shifting from state 0 to state 1
10 20
yydebug: state 1, reading 257 (NUMBER)
yydebug: state 1, shifting to state 3
yydebug: state 3, reducing by rule 3 (list : NUMBER)
10.0
yydebug: after reduction, shifting from state 1 to state 4
yydebug: state 4, reading 257 (NUMBER)
syntax error
yydebug: state 4, error recovery shifting to state 5
yydebug: state 5, shifting to state 8
yydebug: state 8, reducing by rule 7 (list : list error NUMBER)
err 3
20.0
yydebug: after reduction, shifting from state 1 to state 4
yydebug: state 4, reading 10 ('\n')
yydebug: state 4, shifting to state 6
yydebug: state 6, reducing by rule 2 (command : command list '\n')
yydebug: after reduction, shifting from state 0 to state 1
10;20 30
yydebug: state 1, reading 257 (NUMBER)
yydebug: state 1, shifting to state 3
yydebug: state 3, reducing by rule 3 (list : NUMBER)
10.0
yydebug: after reduction, shifting from state 1 to state 4
yydebug: state 4, reading 59 (illegal-symbol)
syntax error
yydebug: state 4, error recovery shifting to state 5
yydebug: state 5, error recovery discards token 59 (illegal-symbol)
yydebug: state 5, reading 257 (NUMBER)
yydebug: state 5, shifting to state 8
yydebug: state 8, reducing by rule 7 (list : list error NUMBER)
err 3
20.0
yydebug: after reduction, shifting from state 1 to state 4
yydebug: state 4, reading 257 (NUMBER)
syntax error
yydebug: state 4, error recovery shifting to state 5
yydebug: state 5, shifting to state 8
yydebug: state 8, reducing by rule 7 (list : list error NUMBER)
err 3
30.0
yydebug: after reduction, shifting from state 1 to state 4
yydebug: state 4, reading 10 ('\n')
yydebug: state 4, shifting to state 6
yydebug: state 6, reducing by rule 2 (command : command list '\n')
yydebug: after reduction, shifting from state 0 to state 1
3,
yydebug: state 1, reading 257 (NUMBER)
yydebug: state 1, shifting to state 3
yydebug: state 3, reducing by rule 3 (list : NUMBER)
3.0
yydebug: after reduction, shifting from state 1 to state 4
yydebug: state 4, reading 44 (',')
yydebug: state 4, shifting to state 7
yydebug: state 7, reading 10 ('\n')
syntax error
yydebug: state 7, error recovery shifting to state 9
yydebug: state 9, reducing by rule 8 (list : list ',' error)
err 4
yydebug: after reduction, shifting from state 1 to state 4
yydebug: state 4, shifting to state 6
yydebug: state 6, reducing by rule 2 (command : command list '\n')
yydebug: after reduction, shifting from state 0 to state 1
#
yydebug: state 1, reading 35 (illegal-symbol)
syntax error
yydebug: state 1, error recovery shifting to state 2
yydebug: state 2, reducing by rule 5 (list : error)
err 1
yydebug: after reduction, shifting from state 1 to state 4
yydebug: state 4, error recovery discards token 35 (illegal-symbol)
yydebug: state 4, reading 10 ('\n')
yydebug: state 4, shifting to state 6
yydebug: state 6, reducing by rule 2 (command : command list '\n')
yydebug: after reduction, shifting from state 0 to state 1
yydebug: state 1, reading 0 (end-of-file)

