ag: scope von feldern
authorBernhard Urban <lewurm@gmail.com>
Tue, 6 Apr 2010 12:54:01 +0000 (14:54 +0200)
committerBernhard Urban <lewurm@gmail.com>
Tue, 6 Apr 2010 12:57:58 +0000 (14:57 +0200)
vorher: "Felder sind im gesamten Programm sichtbar (auch vor der Definition)."
jetzt: "Felder sind ab der Felddefinition bis zum Ende des Programms sichtbar."

(scheiss paulchen-bsp-kopieren ;p)

ag/parser.y

index 7df16d2f1ea6c67f299a0b07c0e5c1fa84366bbf..d7cdf4a8b9ca590a25669c49b5b554fbc42d2717 100644 (file)
 @end
 
 @autoinh s
-/* f .. fields
- * s .. symbols  */
 @attributes { char *name; } IDENT
-@attributes { struct symbol *f; struct symbol *s; } Program
-@attributes { struct symbol *f; } FeldID Structdef Parms
-@attributes { struct symbol *s; } Methoddef Statseq Lexpr Expr Minusterm Multerm Orterm
-Term Exprs Feld
+@attributes { struct symbol *f; } FeldID Parms Structdef Program
+@attributes { struct symbol *s; } Methoddef Statseq Lexpr Expr Minusterm Multerm Orterm Term Exprs Feld
 @attributes { struct symbol *sin; struct symbol *sout; } Statement
 
 @traversal @postorder c
@@ -36,25 +32,22 @@ Term Exprs Feld
 Input:
          Program
          @{
-               @i @Program.s@ = @Program.f@;
+           @i @Program.f@ = new_tab();
          @}
        ;
 
 Program:
          Methoddef ';' Program
          @{
-           @i @Program.0.f@ = @Program.1.f@;
+           @i @Methoddef.s@ = @Program.0.f@;
+           @i @Program.1.f@ = @Program.0.f@;
          @}
-         
+
        | Structdef ';' Program
          @{
-           @i @Program.0.f@ = tab_merge(@Structdef.f@, @Program.1.f@, 1);
+           @i @Program.1.f@ = tab_merge(@Program.0.f@, @Structdef.f@, 1);
          @}
-
        |
-         @{
-               @i @Program.0.f@ = new_tab();
-         @}
        ;
 
 Methoddef: