Парсер в C# и печать AST

Я реализую AST (Абстрактное синтаксическое дерево) в C# для сложной грамматики, однако, чтобы упростить этот вопрос, я буду использовать очень простую грамматику.

Рассмотрим эту грамматику:

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

rules Term ::= Ident
        | Integer ;

Я использовал bnfc, сгенерировал парсер / лексер и дошел до того, что могу разобрать кусок кода и распечатать дерево разбора. Теперь я хочу сопоставить его с AST и распечатать абстрактное синтаксическое дерево. вот что я сделал до сих пор в примере проекта.

Однако в настоящее время, когда я тестирую программу, мой AST возвращается как 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); 

Здесь ast - это ноль. Может ли кто-то с опытом в C# помочь мне справиться с этим?

1 ответ

В вашем проекте я заметил, что все ваши общие методы Visit в конечном итоге возвращают один и тот же постоянный результат, независимо от того, что остальные части этих методов делали до этого:

return default(R);

Для конкретных типов R, которые являются ссылочными типами, это возвращаемое значение "по умолчанию (R)" действительно всегда будет нулевым.

"НТН,

Другие вопросы по тегам