snax's fixes to clean up most of the shift/reduce conflicts

This commit is contained in:
Bill Currie 2007-04-28 08:49:07 +00:00 committed by Jeff Teunissen
parent 3deee307a8
commit 7ba41632d9

View file

@ -123,6 +123,12 @@ expr_t *argv_expr (void);
struct struct_s *strct; struct struct_s *strct;
} }
%nonassoc IFX
%nonassoc ELSE
%nonassoc BREAK_PRIMARY
%nonassoc ';'
%nonassoc CLASS_NOT_CATEGORY
%right <op> '=' ASX PAS /* pointer assign */ %right <op> '=' ASX PAS /* pointer assign */
%right '?' ':' %right '?' ':'
%left OR %left OR
@ -139,6 +145,8 @@ expr_t *argv_expr (void);
%left HYPERUNARY %left HYPERUNARY
%left '.' '(' '[' %left '.' '(' '['
%nonassoc STORAGEX
%token <string_val> CLASS_NAME NAME STRING_VAL %token <string_val> CLASS_NAME NAME STRING_VAL
%token <integer_val> INT_VAL %token <integer_val> INT_VAL
%token <float_val> FLOAT_VAL %token <float_val> FLOAT_VAL
@ -205,7 +213,7 @@ storage_class_t current_storage = st_global;
%} %}
%expect 11 %expect 2
%% %%
@ -305,7 +313,7 @@ storage_class
local_storage_class local_storage_class
: LOCAL { current_storage = st_local; } : LOCAL { current_storage = st_local; }
| { current_storage = st_local; } | %prec STORAGEX { current_storage = st_local; }
| STATIC { current_storage = st_static; } | STATIC { current_storage = st_static; }
; ;
@ -903,7 +911,7 @@ statement
(void) ($<type>3); (void) ($<type>3);
current_storage = st_local; current_storage = st_local;
} }
| IF '(' fexpr ')' save_inits statement | IF '(' fexpr ')' save_inits statement %prec IFX
{ {
expr_t *tl = new_label_expr (); expr_t *tl = new_label_expr ();
expr_t *fl = new_label_expr (); expr_t *fl = new_label_expr ();
@ -1103,7 +1111,7 @@ unary_expr
primary primary
: NAME { $$ = new_name_expr ($1); } : NAME { $$ = new_name_expr ($1); }
| BREAK { $$ = new_name_expr (save_string ("break")); } | BREAK %prec BREAK_PRIMARY { $$ = new_name_expr (save_string ("break")); }
| ARGS { $$ = new_name_expr (".args"); } | ARGS { $$ = new_name_expr (".args"); }
| ARGC { $$ = argc_expr (); } | ARGC { $$ = argc_expr (); }
| ARGV { $$ = argv_expr (); } | ARGV { $$ = argv_expr (); }
@ -1231,7 +1239,7 @@ classdecl
; ;
class_name class_name
: identifier : identifier %prec CLASS_NOT_CATEGORY
{ {
$$ = get_class ($1, 0); $$ = get_class ($1, 0);
if (!$$) { if (!$$) {