X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=parser%2Fparser.y;h=4031e7b4086e0d01718a3442ca9ba7866000c56a;hb=6aa10df8764b244c11269262eb3af806b0d0b82f;hp=ff863819717629e6728f633a36b900aed38c0333;hpb=8005ce205d2cf396d86697041e4b1154dfc6bbee;p=uebersetzerbau-ss10.git diff --git a/parser/parser.y b/parser/parser.y index ff86381..4031e7b 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -4,110 +4,91 @@ %} %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 %% 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 ':=' Expr + | VAR IDENT ':=' 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 Plusterm - | Term Malterm + Term + | NOT Term + | Term Minusterm + | Term Multerm + | Term Orterm + | Term '<' Term + | Term '=' Term ; -Plusterm: - '+' Term Plusterm - | '+' Term +Minusterm: + '-' Term Minusterm + | '-' 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 - ; - -Bterm: - Term GREATER Term - | Term '=' Term - | '(' Bool ')' + OR Term Orterm + | OR Term ; -Field: - Term '.' ID - ; -Call: - ID '(' Exprs ')' - | ID '(' ')' +Term: + '(' Expr ')' + | NUM + | '-' NUM + | THIS + | IDENT + | Term '.' IDENT + | IDENT '(' Exprs ')' + | Term '.' IDENT '(' Exprs ')' ; Exprs: - Expr - | Exprs ',' Expr + Expr ',' Exprs + | Expr + | ; %% @@ -117,7 +98,7 @@ extern int yylineno; int yyerror(char *error_text) { - fprintf(stderr,"Line %i: %s\n", yylineno, error_text); + fprintf(stderr,"Zeile %i: %s\n", yylineno, error_text); exit(2); }