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 ??

Foi útil?

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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top