Fixed the shift reduce errors in the grammer using the yacc debugger.

Removed some lint highlighted by the same.
This commit is contained in:
Steve Chamberlain
1991-05-07 19:16:33 +00:00
parent dcf22de996
commit 6812f0e89f
3 changed files with 28 additions and 32 deletions

View File

@ -65,7 +65,6 @@ token_code_type code;
} table[] = } table[] =
{ {
INT, "int", INT, "int",
CHAR,"char",
NAME,"NAME", NAME,"NAME",
PLUSEQ,"+=", PLUSEQ,"+=",
MINUSEQ,"-=", MINUSEQ,"-=",
@ -86,17 +85,16 @@ token_code_type code;
ALIGN_K,"ALIGN", ALIGN_K,"ALIGN",
BLOCK,"BLOCK", BLOCK,"BLOCK",
SECTIONS,"SECTIONS", SECTIONS,"SECTIONS",
ALIGNMENT,"ALIGNMENT",
SIZEOF_HEADERS,"SIZEOF_HEADERS", SIZEOF_HEADERS,"SIZEOF_HEADERS",
NEXT,"NEXT", NEXT,"NEXT",
SIZEOF,"SIZEOF", SIZEOF,"SIZEOF",
ADDR,"ADDR", ADDR,"ADDR",
MEMORY,"MEMORY", MEMORY,"MEMORY",
DSECT,"DSECT",
NOLOAD,"NOLOAD",
COPY,"COPY",
INFO,"INFO",
OVERLAY,"OVERLAY",
DEFINED,"DEFINED", DEFINED,"DEFINED",
TARGET_K,"TARGET", TARGET_K,"TARGET",
SEARCH_DIR,"SEARCH_DIR", SEARCH_DIR,"SEARCH_DIR",

View File

@ -88,10 +88,10 @@ boolean ldgram_had_equals = false;
} }
%type <etree> exp opt_exp exp_head %type <etree> exp opt_exp
%type <integer> fill_opt opt_block %type <integer> fill_opt opt_block
%type <name> memspec_opt %type <name> memspec_opt
%token <integer> INT CHAR %token <integer> INT
%token <name> NAME %token <name> NAME
%type <integer> length %type <integer> length
@ -105,30 +105,32 @@ boolean ldgram_had_equals = false;
%left <token> EQ NE %left <token> EQ NE
%left <token> '<' '>' LE GE %left <token> '<' '>' LE GE
%left <token> LSHIFT RSHIFT %left <token> LSHIFT RSHIFT
%left <token> '+' '-' %left <token> '+' '-'
%left <token> '*' '/' '%' %left <token> '*' '/' '%'
/*%token <token> '+' '-' '*' '/' '%'*/
%right UNARY %right UNARY
%left <token> '(' %left <token> '('
%token <token> ALIGN_K BLOCK LONG SHORT BYTE %token <token> ALIGN_K BLOCK LONG SHORT BYTE
%token SECTIONS %token SECTIONS
%token '{' '}' %token '{' '}'
%token ALIGNMENT SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH %token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH
%token NEXT SIZEOF ADDR SCRIPT ENDSCRIPT SIZEOF_HEADERS %token SIZEOF_HEADERS
%token MEMORY %token MEMORY
%token DSECT NOLOAD COPY INFO OVERLAY
%token NAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY %token NAME DEFINED TARGET_K SEARCH_DIR MAP ENTRY
%token OPTION_e OPTION_c OPTION_noinhibit_exec OPTION_s OPTION_S OPTION_sort_common %token OPTION_e OPTION_c OPTION_noinhibit_exec OPTION_s OPTION_S OPTION_sort_common
%token OPTION_format OPTION_F OPTION_u %token OPTION_format OPTION_F OPTION_u
%token <integer> SIZEOF NEXT ADDR
%token OPTION_d OPTION_dc OPTION_dp OPTION_x OPTION_X OPTION_defsym %token OPTION_d OPTION_dc OPTION_dp OPTION_x OPTION_X OPTION_defsym
%token OPTION_v OPTION_M OPTION_t STARTUP HLL SYSLIB FLOAT NOFLOAT %token OPTION_v OPTION_M OPTION_t STARTUP HLL SYSLIB FLOAT NOFLOAT
%token OPTION_n OPTION_r OPTION_o OPTION_b OPTION_A OPTION_R %token OPTION_n OPTION_r OPTION_o OPTION_b OPTION_R
%token <name> OPTION_l OPTION_L OPTION_T OPTION_Aarch OPTION_Tfile OPTION_Texp %token <name> OPTION_l OPTION_L OPTION_T OPTION_Aarch OPTION_Tfile OPTION_Texp
%token OPTION_Ur %token OPTION_Ur
%token ORIGIN FILL OPTION_g %token ORIGIN FILL OPTION_g
%token LENGTH BIND SUBSECTION_ALIGN CREATE_OBJECT_SYMBOLS INPUT OUTPUT %token LENGTH CREATE_OBJECT_SYMBOLS INPUT OUTPUT
%type <token> assign_op SIZEOF NEXT ADDR %type <token> assign_op
%type <etree> assignment
%type <name> filename %type <name> filename
%{ %{
@ -284,7 +286,7 @@ command_line_option:
{ {
} }
NAME '=' NAME '='
exp_head exp
{ {
lang_add_assignment(exp_assop($4,$3,$5)); lang_add_assignment(exp_assop($4,$3,$5));
} }
@ -405,12 +407,12 @@ statement:
lang_add_attribute(lang_object_symbols_statement_enum); } lang_add_attribute(lang_object_symbols_statement_enum); }
| statement input_section_spec | statement input_section_spec
| statement length '(' exp_head ')' | statement length '(' exp ')'
{ {
lang_add_data($2,$4); lang_add_data($2,$4);
} }
| statement FILL '(' exp_head ')' | statement FILL '(' exp ')'
{ {
lang_add_fill lang_add_fill
(exp_get_value_int($4, (exp_get_value_int($4,
@ -431,7 +433,7 @@ length:
; ;
fill_opt: fill_opt:
'=' exp_head '=' exp
{ {
$$ = exp_get_value_int($2, $$ = exp_get_value_int($2,
0, 0,
@ -468,12 +470,11 @@ end: ';' | ','
assignment: assignment:
NAME '=' exp
NAME '=' exp_head
{ {
lang_add_assignment(exp_assop($2,$1,$3)); lang_add_assignment(exp_assop($2,$1,$3));
} }
| NAME assign_op exp_head | NAME assign_op exp
{ {
lang_add_assignment(exp_assop('=',$1,exp_binop($2,exp_nameop(NAME,$1),$3))); lang_add_assignment(exp_assop('=',$1,exp_binop($2,exp_nameop(NAME,$1),$3)));
} }
@ -657,18 +658,18 @@ opt_things:
} }
; ;
exp_head:
exp { $$ = $1; }
;
opt_exp: opt_exp:
exp_head exp
{ $$ = $1; } { $$ = $1; }
| { $$= (etree_type *)NULL; } | { $$= (etree_type *)NULL; }
; ;
opt_block: opt_block:
BLOCK '(' exp_head ')' BLOCK '(' exp ')'
{ $$ = exp_get_value_int($3, { $$ = exp_get_value_int($3,
1L, 1L,
"block", "block",

View File

@ -68,11 +68,8 @@ keyword_type keywords[] =
"BLOCK",BLOCK, "BLOCK",BLOCK,
"LENGTH",LENGTH, "LENGTH",LENGTH,
"ALIGN",ALIGN_K, "ALIGN",ALIGN_K,
"SUBSECTION_ALIGN",SUBSECTION_ALIGN,
"ADDR",ADDR, "ADDR",ADDR,
"ENTRY",ENTRY, "ENTRY",ENTRY,
"SCRIPT", SCRIPT,
"ENDSCRIPT", ENDSCRIPT,
"NEXT",NEXT, "NEXT",NEXT,
"sizeof_headers",SIZEOF_HEADERS, "sizeof_headers",SIZEOF_HEADERS,
"SIZEOF_HEADERS",SIZEOF_HEADERS, "SIZEOF_HEADERS",SIZEOF_HEADERS,