]> git.saurik.com Git - bison.git/blobdiff - src/parse-gram.y
* src/symtab.c (symbol_new): Initialize the `printer' member.
[bison.git] / src / parse-gram.y
index 66b8c68ed755849b8031704d87e2e30bd099d2de..df629d8fd048fb014cc9cf366f87458432ed8a48 100644 (file)
@@ -114,6 +114,8 @@ braced_code_t current_braced_code = action_braced_code;
 %token PERCENT_EXPECT "%expect"
 %token PERCENT_START "%start"
 %token PERCENT_PREC     "%prec"
+%token PERCENT_DPREC    "%dprec"
+%token PERCENT_MERGE    "%merge"
 %token PERCENT_VERBOSE  "%verbose"
 %token PERCENT_ERROR_VERBOSE "%error-verbose"
 
@@ -123,6 +125,7 @@ braced_code_t current_braced_code = action_braced_code;
 
 %token PERCENT_DEFINE "%define"
 %token PERCENT_PURE_PARSER "%pure-parser"
+%token PERCENT_GLR_PARSER "%glr-parser"
 
 %token PERCENT_DEFINES "%defines"
 
@@ -184,6 +187,7 @@ declaration:
 | "%no-lines"                              { no_lines_flag = 1; }
 | "%output" "=" string_content             { spec_outfile = $3; }
 | "%pure-parser"                           { pure_parser = 1; }
+| "%glr-parser"                           { glr_parser = 1; }
 | "%skeleton" string_content               { skeleton = $2; }
 | "%token-table"                           { token_table_flag = 1; }
 | "%verbose"                               { report_flag = 1; }
@@ -209,7 +213,7 @@ grammar_declaration:
     {
       symbol_list_t *list;
       for (list = $4; list; list = list->next)
-       symbol_destructor_set (list->sym, list->location, $3);
+       symbol_destructor_set (list->sym, $3, @3);
       symbol_list_free ($4);
       current_braced_code = action_braced_code;
     }
@@ -240,7 +244,7 @@ symbol_declaration:
     {
       symbol_list_t *list;
       for (list = $3; list; list = list->next)
-       symbol_type_set (list->sym, list->location, $2);
+       symbol_type_set (list->sym, $2, @2);
       symbol_list_free ($3);
     }
 ;
@@ -252,8 +256,8 @@ precedence_declaration:
       ++current_prec;
       for (list = $3; list; list = list->next)
        {
-         symbol_type_set (list->sym, list->location, current_type);
-         symbol_precedence_set (list->sym, list->location, current_prec, $1);
+         symbol_type_set (list->sym, current_type, @2);
+         symbol_precedence_set (list->sym, current_prec, $1, @1);
        }
       symbol_list_free ($3);
       current_type = NULL;
@@ -287,24 +291,24 @@ symbol_def:
 | ID
      {
        symbol_class_set ($1, current_class, @1);
-       symbol_type_set ($1, @1, current_type);
+       symbol_type_set ($1, current_type, @1);
      }
 | ID INT
     {
       symbol_class_set ($1, current_class, @1);
-      symbol_type_set ($1, @1, current_type);
+      symbol_type_set ($1, current_type, @1);
       symbol_user_token_number_set ($1, $2, @2);
     }
 | ID string_as_id
     {
       symbol_class_set ($1, current_class, @1);
-      symbol_type_set ($1, @1, current_type);
+      symbol_type_set ($1, current_type, @1);
       symbol_make_alias ($1, $2);
     }
 | ID INT string_as_id
     {
       symbol_class_set ($1, current_class, @1);
-      symbol_type_set ($1, @1, current_type);
+      symbol_type_set ($1, current_type, @1);
       symbol_user_token_number_set ($1, $2, @2);
       symbol_make_alias ($1, $3);
     }
@@ -355,12 +359,16 @@ rhs:
     { grammar_current_rule_action_append ($2, @2); }
 | rhs "%prec" symbol
     { grammar_current_rule_prec_set ($3, @3); }
+| rhs "%dprec" INT
+    { grammar_current_rule_dprec_set ($3, @3); }
+| rhs "%merge" TYPE
+    { grammar_current_rule_merge_set ($3, @3); }
 ;
 
 symbol:
   ID              { $$ = $1; }
 | string_as_id    { $$ = $1; }
-| CHARACTER       { $$ = getsym ($1, @1); }
+| CHARACTER       { $$ = symbol_get ($1, @1); }
 ;
 
 action:
@@ -372,7 +380,7 @@ action:
 string_as_id:
   STRING
     {
-      $$ = getsym ($1, @1);
+      $$ = symbol_get ($1, @1);
       symbol_class_set ($$, token_sym, @1);
     }
 ;