Grammatica per l'analisi dell'istruzione IF
-
08-07-2019 - |
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 ??
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/