It seems that my code was somehow effecting how Bison was parsing. Or at
least this is the assumption I am left making. After deleting all the code
that had anything to do with the %left issue, the Bison parse is correct. Or
at least it is according to the printf statements. Using the printf
statements the trace of the shifts and reductions is below.


Input: a := b + c + d + e


key: id = identifier, r = ref_name, e = expr, s = stmt


shift

id reduce

r shift

r := shift

r := id reduce

r := r reduce

r := e shift

r := e + shift

r := e + id reduce

r := e + r reduce

r := e + e reduce

r := e shift

r := e + shift

r := e + id reduce

r := e + r reduce

r := e + e reduce

r := e shift

r := e + shift

r := e + id reduce

r := e + r reduce

r := e + e reduce

r := e reduce

s


the parse tree is:


e → e1 + e2

e1 → e3 + e4

e3 → e5 + e6

e5 → r

r → id

e6 → r

r → id

e4 → r

r → id

e2 → r

r → id


printf output:


const_decl -> Epsilon

ident_list -> IDENTIFIER

basic_type -> INTEGER

type -> basic_type

basic_var -> ident_list: type

ident_list -> IDENTIFIER

ident_list -> IDENTIFIER, ident_list

ident_list -> IDENTIFIER, ident_list

ident_list -> IDENTIFIER, ident_list

ident_list -> IDENTIFIER, ident_list

basic_type -> INTEGER

type -> basic_type

basic_var -> ident_list: type

var_list -> basic_var;

var_list -> basic_var; var_list

var_decl -> VAR var_list

proc_decl -> Epsilon

This is the value of $<blIdentifier>$ at ref_name begin: a

ref_name -> IDENTIFIER

This is the value of $<blIdentifier>$ at ref_name begin: b

ref_name -> IDENTIFIER

expr -> ref_name

This is the value of $<blIdentifier>$ at ref_name begin: c

ref_name -> IDENTIFIER

expr -> ref_name

expr -> expr ADDOP expr

This is the value of $<blIdentifier>$ at ref_name begin: d

ref_name -> IDENTIFIER

expr -> ref_name

expr -> expr ADDOP expr

This is the value of $<blIdentifier>$ at ref_name begin: e

ref_name -> IDENTIFIER

expr -> ref_name

expr -> expr ADDOP expr

stmt -> ref_name := expr

stmt_seq -> stmt;

comp_stmt -> BEGIN stmt_seq END

block -> const_decl var_decl proc_decl comp_stmt

prog -> PROGRAM IDENTIFIER; block .
_______________________________________________
help-bison@gnu.org http://lists.gnu.org/mailman/listinfo/help-bison

Reply via email to