Wie wird der Code mithilfe von Scala Parser Combinators geändert, um die Priorität des Operators zu berücksichtigen?

8

Betrachten Sie diesen Teil der Grammatik:

%Vor%

Ist es notwendig, Teile davon neu zu schreiben, um neue Regeln zu erstellen, oder gibt es nur eine Methode (wie | vs. ||| für den ersten vs. längsten Regelvergleich) Ich vermisse derzeit, was das Notwendige tut ?

    
soc 03.07.2011, 10:43
quelle

1 Antwort

5

Die Vorrangstellung eines Operators ist eine natürliche Folge der Art und Weise, wie Regeln geschrieben werden. Zum Beispiel besteht in dieser Grammatik ein SimpleExpression aus Addition, Subtraktion und logisch -oder term , und ein term besteht aus Multiplikation, Division, Modulus und logisch -und factor .

Also wenn du das hast:

%Vor%

Sie erhalten Folgendes (grob gesagt, zur besseren Übersicht):

%Vor%

Und wenn Sie das haben:

%Vor%

Du bekommst das (grob gesagt) zurück:

%Vor%

Sie verlieren die Additionsoperatoren wegen rep1sep - Separatoren werden verworfen.

    
Daniel C. Sobral 03.07.2011, 16:22
quelle