Subato

Grammatik für Ausdrücke

Schreiben Sie eine Grammatik für das Generator-Tool ANTLR, die arithmetische Ausdrücke generiert. Nichtterminalzeichen werden dabei in Kleinbuchstaben Terminalzeichen in Großbuchstaben notiert. Die Terminalzeichen sind bereits definiert.

Eine Regel besteht aus einem Nichtterminalzeichen, gefolgt von einem Doppelpunkt. Dann folgt die rechte Seite. Eine Regel wird mit einem Semikolon abgeschlossen.

Für die rechte Seite einer Regeldefinition steht die Veroderung | zur Verfügung. Die Sequenz wird durch HIntereinanderschreiben von Terminal und Nichtterminalzeichen getrennt durch Leerzeichen ausgedrückt.

Terminale können auch direkt in einfachen Anführungszeichen in einer Regel angegeben werden.

Eine kleiner Ausschnitt einer Beispielgrammatik:

retstat : 'return' expr ';' ;

stat: retstat
  | 'break' ';'
  | 'continue' ';'
  ;

Definieren Sie eine einfache Grammatik für arithmetische Ausdrücke. Diese sollen beinhalten:

  • Variablenbezeichner und Zahlenliterale: x, y, z,  hello, 42, ...
  • Vergleiche von Ausdrücken: x<=42, a==b,...
  • Arithmetik mit +,-, *, /, % und ^ (Potenz): x+y*42^15> 17+4*2,...
  • geklammerte Ausdrücke: (17+4)*2,...

Die Startsymbol sei »start«.


grammar Arithmetic; start :relationalExpreesion EOF; relationalExpreesion : /*TODO*/ ; /*TODO*/ //Terminalsymbole VARIABLE: VALID_ID_START VALID_ID_CHAR*; fragment VALID_ID_START : ('a' .. 'z') | ('A' .. 'Z') | '_' ; fragment VALID_ID_CHAR : VALID_ID_START | ('0' .. '9') ; UNSIGNED_INTEGER : ('0' .. '9')+ ; LPAREN: '('; RPAREN: ')'; PLUS: '+'; MINUS: '-'; TIMES: '*'; DIV: '/'; MOD: '%'; EQ: '=='; GE: '>='; LE: '<='; GT: '>'; LT: '<'; POW: '^'; //Whitespace WS : [ \r\n\t] + -> skip;
g4
You are not logged in and therefore you cannot submit a solution.