MGrammar para analizar la declaración IF
-
08-07-2019 - |
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 ...
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?
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/