2016-03-26 5 views
0

Ich implementiere eine AST (Abstract Syntax Tree) in C# für eine komplexe Grammatik, aber um diese Frage einfach zu machen, werde ich eine sehr einfache Grammatik verwenden.Parser in C# und Drucken AST

Betrachten Sie diese Grammatik:

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

rules Term ::= Ident 
     | Integer ; 

Ich habe verwendet bnfc und erzeugt den Parser/Lexer und kam zu dem Punkt, dass ich ein Stück Code analysieren kann und das Parsing-Baum drucken. Jetzt möchte ich es AST zuordnen und den Abstract Syntax Tree drucken. here habe ich bisher in einem Beispielprojekt gemacht.

Allerdings, wenn ich derzeit das Programm testen, kommt meine AST als NULL zurück.

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

Hier ist Ast null. Kann mir jemand mit Erfahrung in C# dabei helfen, auf dem richtigen Weg zu sein?

Antwort

1

Bei einem Projekt, bemerkte ich, dass alle generischen Besuchen Methoden nicht die gleiche konstante Ergebnis Rückkehr am Ende egal, was der Rest dieser Stellen Methoden vor, dass getan hat:

return default(R); 

Für Betonarten Bei R, die Referenztypen sind, ist dieser Rückgabewert "default (R)" in der Regel immer Null.

'HTH,

+0

Danke @YSharp ... bitte helfen Sie mir zu verstehen. Was würde ich dann zurückgeben? – 2D3D4D