Question

Je suis en train de créer une spécification MGrammar pour analyser un pseudo-code à la recherche d'informations particulières. La plupart des spécifications fonctionnent sauf un élément essentiel.

Le pseudo-code prend en charge une syntaxe if-then-else et je suis incapable de trouver un moyen satisfaisant de l’analyser. La construction exacte est ...

expression d'opérateur d'expression IF ALORS
 Statement1
 Statement2
 Statementn
ELSEIF expression opérateur expression THEN
 Statement1
 Statement2
 Statementn
ELSE
 Statement1
 Statement2
 Statementn
ENDIF

... Où Else et Elseif sont facultatifs.

Ce que j'ai jusqu'ici, c'est: `syntaxe Statement = r: ReturnClause = > r

i: IfClause = > i

ei: ElseifClause = > ei

e: ElseClause = > e |
end: EndClause = > fin v: expression = > v;

syntaxe IfClause = Si nom: Opérateur d'identifiant: Opérateur Puis instruction: Instruction = > Si [nom, opérateur, alors [déclaration]];
syntax ElseifClause = Nom Elseif: Identifiant opérateur: Opérateur Puis instruction: Instruction = > ElseIf [nom, opérateur, Then [déclaration]];
syntax ElseClause = Else statement: Statement = > Else [déclaration];
syntaxe EndClause = Endif; `

Cependant, la déclaration après "Then" et "Else" n'est pas assez gourmande et ne capture que la première déclaration de l'arbre d'analyse.

Quelqu'un a-t-il essayé de mettre en œuvre l'analyse syntaxique d'une instruction If à l'aide de MGrammar ou avez-vous des suggestions ??

Était-ce utile?

La solution

Vous pouvez trouver une grammaire (presque) complète en C # 4.0 dans le projet archétype sur codeplex. Dan Vanderboom l’a écrit en préparation de son nouveau code de langue appelé "Archétype".

Peut-être que cela aide: http://archetype.codeplex.com/

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top