【发布时间】:2011-04-08 13:51:23
【问题描述】:
获取语法树的最快(更小的代码)方法是什么?
我正在尝试获取语法树。我已经根据我的简单语法生成了 C# 代码:
grammar MyPascal;
options
{
language=CSharp3;
output=AST;
}
operator: (block | ID);
block : BEGIN operator* END;
BEGIN :'begin';
END :'end';
ID :('a'..'z')+;
WS :( ' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;};
当我使用 ANTLR 时,它适用于简单的输入文本,例如:
input.txt:
begin
abs
qwe
begin
begin
end
end
end
我得到了很好的语法树图片。
现在我想知道是否有任何简单的方法可以在不编写 1000 行代码的情况下从 C# 获取我的“程序”的树结构。
我在这里尝试获取语法树:
class Program
{
static void Main(string[] args)
{
MyPascalLexer lex = new MyPascalLexer(new ANTLRFileStream(@"M:\input.txt"));
CommonTokenStream tokens = new CommonTokenStream(lex);
MyPascalParser g = new MyMyPascalParser(tokens);
MyPascalParser.myprogram_return X = g.myprogram();
Console.WriteLine(X.Tree); // Writes: nill
Console.WriteLine(X.Start); // Writes: [@0,0:4='begin',<4>,1:0]
Console.WriteLine(X.Stop); // Writes: [@35,57:57='end',<19>,12:2]
}
}
【问题讨论】: