ag: wegen '@autoinh symbols' nicht noetig
[uebersetzerbau-ss10.git] / ag / parser.y
index 7634069298681de8a634b4c1b3dc7519515a2d41..994b76cb521b5b4b1167a40ec3599d8c08dd16d8 100644 (file)
@@ -2,7 +2,7 @@
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
-       #include "symbol_table.h"
+       #include "symtable.h"
 %}
 
 %start         Input
 @autoinh symbols
 
 @attributes    { char *name; } ID
-@attributes    { struct symbol_t *fields; struct symbol_t *symbols; } Program
-@attributes    { struct symbol_t *fields; } Ids Structdef
-@attributes    { struct symbol_t *pars; } Pars
-@attributes    { struct symbol_t *symbols; } Funcdef Stats Bool Expr Call Lexpr Field Term Plusterm Malterm Bterm Orterm Exprs
-@attributes    { struct symbol_t *in_symbols; struct symbol_t *out_symbols; } Stat
+@attributes    { struct symbol *fields; struct symbol *symbols; } Program
+@attributes    { struct symbol *fields; } Ids Structdef
+@attributes    { struct symbol *pars; } Pars
+@attributes    { struct symbol *symbols; } Funcdef Stats Bool Expr Call Lexpr Field Term Plusterm Malterm Bterm Orterm Exprs
+@attributes    { struct symbol *in_symbols; struct symbol *out_symbols; } Stat
 
-@traversal @postorder t
+@traversal @postorder c
 
 %%
 
@@ -29,26 +29,21 @@ Input:                Program
 
 Program:         Funcdef ';' Program
                @{
-                  @i @Program.fields@ = @Program.1.fields@;
+                  @i @Program.0.fields@ = @Program.1.fields@;
                @}
 
                | Structdef ';' Program
                @{
-                  @i @Program.fields@ = table_merge(@Structdef.fields@, @Program.1.fields@, 1);
-                  @i @Program.1.symbols@ = @Program.0.symbols@;
+                  @i @Program.0.fields@ = tab_merge(@Structdef.fields@, @Program.1.fields@, 1);
                @}
 
                |
-               @{ @i @Program.fields@ = new_table(); @}
+               @{ @i @Program.fields@ = new_tab(); @}
 
                ;
  
 Funcdef:         FUNC ID '(' Pars ')' Stats END
-                       @{ @i @Stats.symbols@ = table_merge(@Funcdef.symbols@, @Pars.pars@, 0); @}
-
-               |
-                 FUNC ID '(' ')' Stats END
-                       @{ @i @Stats.symbols@ = table_merge(@Funcdef.symbols@, new_table(), 0); @}
+                       @{ @i @Stats.symbols@ = tab_merge(@Funcdef.symbols@, @Pars.pars@, 0); @}
 
                ;  
  
@@ -58,24 +53,27 @@ Structdef:    STRUCT Ids END
                ;  
 
 Ids:             ID Ids
-               @{ @i @Ids.fields@ = table_add_symbol(@Ids.1.fields@, @ID.name@, SYMBOL_TYPE_FIELD, 1); @}
+               @{ @i @Ids.0.fields@ = tab_add_symbol(@Ids.1.fields@, @ID.name@, S_FIELD, 1); @}
 
                |
-               @{ @i @Ids.fields@ = new_table(); @}
+               @{ @i @Ids.fields@ = new_tab(); @}
 
                ;
 
 Pars:            Pars ',' ID
-               @{ @i @Pars.pars@ = table_add_symbol(@Pars.1.pars@, @ID.name@, SYMBOL_TYPE_VAR, 0); @}
+               @{ @i @Pars.0.pars@ = tab_add_symbol(@Pars.1.pars@, @ID.name@, S_VAR, 0); @}
 
                | ID
-               @{ @i @Pars.pars@ = table_add_symbol(new_table(), @ID.name@, SYMBOL_TYPE_VAR, 0); @}
+               @{ @i @Pars.pars@ = tab_add_symbol(new_tab(), @ID.name@, S_VAR, 0); @}
+
+               |
+               @{ @i @Pars.pars@ = new_tab(); @}
 
                ; 
  
 Stats:           Stat ';' Stats
                @{
-                  @i @Stat.in_symbols@ = @Stats.symbols@;
+                  @i @Stat.in_symbols@ = @Stats.0.symbols@;
                   @i @Stats.1.symbols@ = @Stat.out_symbols@;
                @}
 
@@ -84,7 +82,7 @@ Stats:                  Stat ';' Stats
  
 Stat:            VAR ID ASSIGN Expr
                @{
-                  @i @Stat.out_symbols@ = table_add_symbol(clone_table(@Stat.in_symbols@), @ID.name@, SYMBOL_TYPE_VAR, 0);
+                  @i @Stat.out_symbols@ = tab_add_symbol(clone_tab(@Stat.in_symbols@), @ID.name@, S_VAR, 0);
                   @i @Expr.symbols@ = @Stat.in_symbols@;
                @}
 
@@ -105,7 +103,7 @@ Stat:                 VAR ID ASSIGN Expr
                | IF Bool THEN Stats ELSE Stats END
                @{
                   @i @Bool.symbols@ = @Stat.in_symbols@;
-                  @i @Stats.symbols@ = @Stat.in_symbols@;
+                  @i @Stats.0.symbols@ = @Stat.in_symbols@;
                   @i @Stats.1.symbols@ = @Stat.in_symbols@;
                   @i @Stat.out_symbols@ = @Stat.in_symbols@;
                @}
@@ -132,7 +130,7 @@ Stat:                 VAR ID ASSIGN Expr
                ;
  
 Lexpr:           ID
-               @{ @t check_variable(@Lexpr.symbols@, @ID.name@); @}
+               @{ @c check_variable(@Lexpr.symbols@, @ID.name@); @}
 
                | Field
                ;
@@ -153,7 +151,7 @@ Malterm:      '*' Term Malterm
  
 Term:            '(' Expr ')'
                | ID
-               @{ @t check_variable(@Term.symbols@, @ID.name@); @}
+               @{ @c check_variable(@Term.symbols@, @ID.name@); @}
 
                | NUM
                | Call
@@ -175,7 +173,7 @@ Bterm:                Term GREATER Term
                ;
 
 Field:           Term '.' ID
-               @{ @t check_field(@Field.symbols@, @ID.name@); @}
+               @{ @c check_field(@Field.symbols@, @ID.name@); @}
 
                ;