ag: refactor fun
[uebersetzerbau-ss10.git] / ag / parser.y
index d7cdf4a8b9ca590a25669c49b5b554fbc42d2717..dbd4e2412f340410fb84c702279515e8ba76f387 100644 (file)
@@ -6,8 +6,7 @@
 %}
 
 %start Input
-%token STRUCT END METHOD VAR IF THEN ELSE WHILE DO RETURN NOT OR THIS
-%token IDENT NUM ASSIGN
+%token STRUCT END METHOD VAR IF THEN ELSE WHILE DO RETURN NOT OR THIS IDENT NUM ASSIGN
 
 @macro xxputsin(xx,)
        @i xx = @Statement.sin@;
@@ -32,7 +31,7 @@
 Input:
          Program
          @{
-           @i @Program.f@ = new_tab();
+           @i @Program.f@ = tab_new();
          @}
        ;
 
@@ -73,7 +72,7 @@ Parms:
 
        |
          @{
-           @i @Parms.f@ = new_tab();
+           @i @Parms.f@ = tab_new();
          @}
        ;
 
@@ -85,7 +84,7 @@ FeldID:
 
        |
          @{
-           @i @FeldID.f@ = new_tab();
+           @i @FeldID.f@ = tab_new();
          @}
        ;
 
@@ -109,7 +108,9 @@ Statement:
 
        | VAR IDENT ASSIGN Expr
          @{
-               @i @Statement.sout@ = tab_add_symbol(clone_tab(@Statement.sin@), @IDENT.name@, S_VAR, 1);
+               /* tab_clone ist hier noetig, vgl. folgendes statement
+                * > var x := x - 1; */
+               @i @Statement.sout@ = tab_add_symbol(tab_clone(@Statement.sin@), @IDENT.name@, S_VAR, 1);
                xxputsin(@Expr.s@,)
          @}