Pregunta

Estoy construyendo una especificación de MGrammar para analizar algunos pseudocódigos en busca de bits particulares de información. Tengo la mayoría de las especificaciones funcionando, excepto 1 elemento crucial.

El pseudocódigo admite una sintaxis if-then-else y no he podido encontrar una forma satisfactoria de analizarlo. La construcción exacta es ...

IF expresión operador expresión ENTONCES
 Declaración1
 Declaración2
 Declaraciónn
ELSEIF expresión operador expresión ENTONCES
 Declaración1
 Declaración2
 Declaraciónn
ELSE
 Declaración1
 Declaración2
 Declaraciónn
ENDIF

... Donde Else y Elseif son opcionales.

Lo que tengo hasta ahora es: Declaración de sintaxis = r: ReturnClause = > r |
i: IfClause = > i |
ei: ElseifClause = > ei |
e: ElseClause = > e |
end: EndClause = > fin |
v: Expresión = > v;

sintaxis IfClause = If nombre: Operador identificador: Operador Entonces instrucción: Declaración = > If [nombre, operador, luego [sentencia]];
sintaxis ElseifClause = Elseif nombre: Operador identificador: Operador Entonces instrucción: Declaración = > ElseIf [nombre, operador, luego [sentencia]];
sintaxis ElseClause = instrucción Else: instrucción = > Lo demás [declaración];
sintaxis EndClause = Endif; `

Sin embargo, la declaración después de 'Then' y 'Else' no es lo suficientemente codiciosa y solo captura la primera declaración en el árbol de análisis.

¿Alguien ha intentado implementar el análisis de una instrucción If usando MGrammar o tiene alguna sugerencia?

¿Fue útil?

Solución

Puede encontrar una gramática (casi) completa de C # 4.0 en el proyecto arquetipo en codeplex. Dan Vanderboom lo escribió en preparación de su nuevo código de idioma llamado "Arquetipo".

Quizás eso ayude: http://archetype.codeplex.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top