MGrammar para analisar instrução IF
-
08-07-2019 - |
Pergunta
Estou construindo-se uma especificação MGrammar para analisar algum código pseudo procurando pedaços particulares de informação. Eu tenho a maior parte do trabalho de especificação exceto para 1 elemento cruical.
O código pseudo suporta uma sintaxe if-then-else e eu fui incapaz de encontrar uma maneira satisfatória de analisá-lo. A construção exata é ...
IF expression operator expression THEN
Statement1
Statement2
Statementn
ELSEIF expression operator expression THEN
Statement1
Statement2
Statementn
ELSE
Statement1
Statement2
Statementn
ENDIF
... Quando a Else e Elseif são opcionais.
O que eu tenho até agora é:
`Declaração de sintaxe = r: ReturnClause => r |
i: IfClause => i |
ei: ElseifClause => ei |
e: ElseClause => e |
final: EndClause => end |
v: Expression => v;
sintaxe IfClause = Se o nome: Operador Identificador: Operador Então declaração: Declaração => Se [nome, operador, então [declaração]];
sintaxe ElseifClause = nome Elseif: Operador Identificador: Operador Então declaração: Declaração => ElseIf [nome, operador, então [declaração]];
sintaxe ElseClause = Else: Declaração => Else [declaração];
sintaxe EndClause = Endif; `
No entanto, a declaração após o 'Então' e 'Else' não é suficiente ganancioso e só capta a primeira declaração na árvore de análise.
Alguém já tentou implementar a análise de uma instrução if usando MGrammar ou tem alguma sugestão ??
Solução
Você pode encontrar um (quase) completo C # 4.0 gramática no projeto arquétipo no CodePlex. Dan Vanderboom escreveu na preparação de seu novo código de linguagem com o nome "Arquétipo".
Talvez que ajuda: http://archetype.codeplex.com/