2016-03-26 3 views
0

Je suis en train d'implémenter un AST (Abstract Syntax Tree) en C# pour une grammaire complexe, cependant, pour simplifier cette question, je vais utiliser une grammaire très simple.Analyseur en C# et impression AST

Tenir compte cette grammaire:

rules Expr ::= Term "+" Term 
     | Term ; 

rules Term ::= Ident 
     | Integer ; 

Je l'ai utilisé bnfc et a généré l'analyseur/lexer et obtenu au point que je peux analyser un morceau de code et peut imprimer l'arbre d'analyse syntaxique. Maintenant, je veux le mapper à AST, et imprimer l'arbre de syntaxe abstraite. here est ce que j'ai fait jusqu'à présent dans un exemple de projet.

Cependant, actuellement, lorsque je teste le programme, mon AST revient comme NULL.

var astGen = new gplex.VisitSkeleton.ExprVisitor<Expr1, gplex.Absyn.Expr1>(); 
var ast = astGen.Visit((gplex.Absyn.Expr1)parse_tree, (gplex.Absyn.Expr1)parse_tree); 

Ici, ast est nul. Est-ce que quelqu'un avec de l'expérience en C# peut m'aider à aller de l'avant avec ça?

Répondre

1

A votre projet, je remarquai que toutes vos méthodes génériques de visite finissent par retourner le même résultat constant, peu importe ce que le reste des corps de ces méthodes a fait avant que:

return default(R); 

Pour les types concrets de R qui sont des types de référence, cette valeur de retour "default (R)" sera en effet toujours nulle.

'HTH,

+0

Merci @YSharp ... aidez-moi à comprendre. Que ferais-je revenir alors? – 2D3D4D