Implementujem AST (Abstraktný syntaktický strom) v C # pre komplexnú gramatiku, aby som túto otázku jednoduchý, budem používať veľmi jednoduchú gramatiku.
Zvážte túto gramatiku:
rules Expr ::= Term "+" Term
| Term ;
rules Term ::= Ident
| Integer ;
Použil som bnfc a vygeneroval analyzátor / analyzátor a dostal sa k bodu, že môžem analyzovať kus kódu a vytlačiť analyzovaný strom. Teraz ju chcem zmapovať do AST a vytlačiť Strom abstraktnej syntaxe. tu je to, čo som doteraz urobil vo vzorovom projekte.
V súčasnosti, keď otestujem program, môj AST sa vráti ako 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);
Tu je ast nulová. Môže mi niekto so skúsenosťami v C # pomôcť, aby som sa s tým spojil?
odpovede:
1 pre odpoveď č. 1Pri vašom projekte som si všimol, že všetky vaše generické metódy návštevy skončia tým, že vrátia rovnaký konštantný výsledok, bez ohľadu na to, aké zvyšné z týchto metód "orgány urobili pred tým:
return default(R);
Pre konkrétne typy R, ktoré sú referenčnými typmi, bude táto "východisková (R)" návratová hodnota skutočne vždy nulová.
"HTH,