2016-07-31 29 views
0

Rechner Mathe-Operator Vorrang ist oft erinnert an Lungen-PMDAS.Wie funktioniert die Beispielgrammatik auf der antlr4-Homepage?

Die Grammatik auf der ANTLR home page (mit den gleichen Abkürzungen) hat Reihenfolge MDASP. Dies ist nicht PMDAS oder umgekehrtes PMDAS, wie ich es erwarten würde. Z.B. this stackoverflow answer enthält eine Grammatik, die wie PMDAS aussieht.

Aber egal welche Ausdrücke ich in die Befehlszeile legte; der Syntaxbaum sieht korrekt aus!

grammar Expr;  
prog: (expr NEWLINE)* ; 
expr: expr ('*'|'/') expr 
    | expr ('+'|'-') expr 
    | INT 
    | '(' expr ')' 
    ; 
NEWLINE : [\r\n]+ ; 
INT  : [0-9]+ ; 

Wie funktioniert das?

+0

Welche Ausdrücke haben Sie versucht zu parsen? –

Antwort

0

Die Frage ist ein wenig schwierig zu beantworten, da ich bin nicht ganz sicher, was Sie zu analysieren, aber Pseudo-Code versuchen, was diese Grammatik erwartet kann Ihnen helfen, es zu verstehen:

An int is one or more numbers from 0 to 9 
A new line is one or more \r\n 

an (expr)ession is made up of any of these: 
an expression with a '*' or '/' and another expression 
an expression with a '+' or '-' and another expression 
an int 
a curly brace containing an expression followed by a curly brace 

the (prog)ram is made up of zero or more expressions followed by new lines. 

Sie auch, dass ANTLR erinnern:

geht für die längste Sequenz zuerst. wenn zwei Regeln oder mehr entsprechen die möglichst lange Sequenz dann wählt sie die lexikalische Regel angegebene erste

This link können Sie sehr nützlich sein. Jedenfalls, wenn du den Baum veröffentlichst, den du nicht verstehen kannst, könnten wir versuchen, dir weiter zu helfen. Viel Glück mit Ihrem Projekt.