parser: schaut fertig aus... muss nur noch getestet werden :D
[uebersetzerbau-ss10.git] / parser / parser.y
index ff863819717629e6728f633a36b900aed38c0333..2618f192e6ebdc24314272949f0042e53d2400f1 100644 (file)
@@ -4,61 +4,58 @@
 %}
 
 %start Program
-%token FUNC END STRUCT VAR IF THEN ELSE WHILE DO RETURN OR NOT
-%token ID NUM ASSIGN GREATER
+%token STRUCT END METHOD VAR IF THEN ELSE WHILE DO RETURN NOT OR THIS
+%token IDENT NUM ASSIGN
 
 %%
 
 Program:
-         Funcdef ';' Program
+         Methoddef ';' Program
        | Structdef ';' Program
        |
        ;
 
-Funcdef:
-         FUNC ID '(' Pars ')' Stats END
-       | FUNC ID '(' ')' Stats END
-       ;
-
 Structdef:
-         STRUCT Ids END
+         STRUCT Idents END
        ;
 
-Ids:
-         ID Ids
-       |
+Methoddef:
+         METHOD IDENT '(' Idents ')' Statseq END
        ;
 
-Pars:
-         Pars ',' ID
-       | ID
+Idents:
+         IDENT Idents
+       |
        ;
 
-Stats:
-         Stat ';' Stats
+Statseq:
+         Statement ';' Statseq
        |
        ;
 
-Stat:
-         VAR ID ASSIGN Expr
-       | Lexpr ASSIGN Expr
-       | IF Bool THEN Stats END
-       | IF Bool THEN Stats ELSE Stats END
-       | WHILE Bool DO Stats END
-       | Call
+Statement:
+         Lexpr ASSIGN Expr
+       | VAR IDENT ASSIGN Expr
+       | Expr
+       | IF Expr THEN Statseq END
+       | IF Expr THEN Statseq ELSE Statseq END
+       | WHILE Expr DO Statseq END
        | RETURN Expr
        ;
 
 Lexpr:
-         ID
-       | Field
+         IDENT
+       | Term '.' IDENT
        ;
 
 Expr:
-         '-' Term
-       | Term
+         Term
+       | NOT Term
        | Term Plusterm
-       | Term Malterm
+       | Term Multerm
+       | Term Orterm
+       | Term '<' Term
+       | Term '=' Term
        ;
 
 Plusterm:
@@ -66,43 +63,30 @@ Plusterm:
        | '+' Term
        ;
 
-Malterm:
-         '*' Term Malterm
+Multerm:
+         '*' Term Multerm
        | '*' Term
        ;
 
-Term:
-         '(' Expr ')'
-       | ID
-       | NUM
-       | Call
-       | Field
-       ;
-
-Bool:
-         Bterm
-       | Bterm Orterm
-       | NOT Bterm
-       ;
-
 Orterm:
-         OR Bterm Orterm
-       | OR Bterm
+         OR Term Orterm
+       | OR Term
        ;
 
-Bterm:
-         Term GREATER Term
-       | Term '=' Term
-       | '(' Bool ')'
-       ;
 
-Field:
-         Term '.' ID
+Term:
+         '(' Expr ')'
+       | NUM
+       | '-' NUM
+       | THIS
+       | IDENT
+       | Term '.' IDENT
+       | Methcall
        ;
 
-Call:
-         ID '(' Exprs ')'
-       | ID '(' ')'
+Methcall:
+         IDENT '(' Exprs ')'
+       | Term '.' IDENT '(' Exprs ')'
        ;
 
 Exprs: