Frage

Ich baue eine MGrammar spec bis zu einige Pseudo-Code zu analysieren für bestimmte Bits von Informationen. Ich habe die meisten des spec Arbeits mit Ausnahme von 1 cruical Elemente.

Der Pseudocode unterstützt eine if-then-else-Syntax, und ich habe es nicht gelungen, eine befriedigende Lösung für die Parsen es zu finden. Die genaue Konstruktion ist ...

IF expression operator expression THEN
Statement1
Statement2
Statementn
ELSEIF expression operator expression THEN
Statement1
Statement2
Statementn
ELSE
Statement1
Statement2
Statementn
ENDIF

... Wenn die Else und Elseif sind optional.

Was ich habe, so weit ist: `Syntax Statement = r: ReturnClause => r |
i: IfClause => i |
ei: ElseifClause => ei |
e: ElseClause => e |
Ende: EndClause => Ende |
v: Ausdruck => v;

Syntax IfClause = Wenn Name: Bezeichner Operator: Operator Then-Anweisung: Statement => Wenn [Name, Operator, dann [Erklärung]];
Syntax ElseifClause = Elseif Name: Bezeichner Operator: Operator Then-Anweisung: Statement => ElseIf [Name, Operator, dann [Erklärung]];
Syntax ElseClause = Else-Anweisung: Statement => Else [Erklärung];
Syntax EndClause = Endif; `

Allerdings ist die Erklärung nach der ‚Dann‘ und ‚Else‘ reicht nicht gierig und erfasst nur die erste Anweisung in dem Parsing-Baum.

Hat jemand versucht, das Parsen von einer If-Anweisung zu implementieren mit MGrammar oder irgendwelche Vorschläge ??

War es hilfreich?

Lösung

Sie können eine (fast) vollständige C # 4.0 Grammatik im Urbild Projekt auf Codeplex finden. Dan Vanderboom schrieb er in Vorbereitung seiner neuen Sprachcode namens „Urform“.

Vielleicht hilft: http://archetype.codeplex.com/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top