Domanda

Sto creando una specifica MGrammar per analizzare alcuni pseudo-codice alla ricerca di particolari bit di informazioni. Ho la maggior parte delle specifiche funzionanti tranne 1 elemento cruical.

Lo pseudo codice supporta una sintassi if-then-else e non sono stato in grado di trovare un modo soddisfacente per analizzarlo. Il costrutto esatto è ...

SE espressione operatore espressione THEN
 statement1
 statement2
 Statementn
Espressione dell'operatore espressione ELSEIF ALLORA
 statement1
 statement2
 Statementn

ELSE  statement1
 statement2
 Statementn
ENDIF

... Dove Else ed Elseif sono opzionali.

Quello che ho finora è: Istruzione `sintassi = r: ReturnClause = > r |
i: IfClause = > io |
ei: ElseifClause = > ei |
e: ElseClause = > e |
end: EndClause = > fine |
v: Expression = > v;

sintassi IfClause = If name: Operatore identificatore: Operatore Quindi istruzione: Statement = > Se [nome, operatore, quindi [istruzione]];
sintassi ElseifClause = Nome Elseif: Operatore identificativo: Operatore Quindi istruzione: Istruzione = > ElseIf [nome, operatore, quindi [istruzione]];
sintassi ElseClause = Istruzione Else: Statement = > Else [dichiarazione];
sintassi EndClause = Endif; `

Tuttavia, l'affermazione dopo 'Then' e 'Else' non è abbastanza avida e cattura solo la prima affermazione nell'albero di analisi.

Qualcuno ha provato a implementare l'analisi di un'istruzione If usando MGrammar o ha qualche suggerimento ??

È stato utile?

Soluzione

Puoi trovare una grammatica C # 4.0 (quasi) completa nel progetto archetipo su codeplex. Dan Vanderboom lo ha scritto in preparazione del suo nuovo codice di lingua chiamato " Archetype " ;.

Forse questo aiuta: http://archetype.codeplex.com/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top