【发布时间】:2011-10-03 13:34:49
【问题描述】:
使用 ANTLR2,您可以在语法定义文件中定义如下内容:
options
{
language = "CSharp";
namespace = "Extended.Tokens";
}
tokens {
TOKEN<AST=Extended.Tokens.TokenNode>;
}
然后,您可以创建一个类:
public class TokenNode: antlr.BaseAST
{
...
}
是否可以使用类似的东西(将类创建委托给 AST 工厂,而不是我手动进行树复制)?仅通过从旧格式到新格式的简单语法定义复制不起作用,我尝试在他们的网站和示例中搜索类似的东西。有什么提示吗?
编辑
我不是在尝试创建自定义令牌,而是自定义“节点解析器”。
为了“执行”一棵树,你有两个选择(据我所知):
- 创建一个“树访问者”并处理值,或者
- 通过“几乎复制”语法定义来创建树解析器。
在 v2 的情况下,我可以将树节点装饰成我喜欢的任何方法,然后在解析器运行后通过从根节点调用类似“执行”的方法来调用它们。
【问题讨论】:
-
抱歉,打错了:这个定义是在 v2.2 中定义的。我编辑了帖子。
-
这有意义吗?有没有办法在 ANTLR3 中实现类似于 ANTLR2 的东西?
-
不是自定义令牌,而是自定义“节点解析器”。为了“执行”一棵树,您有两个选择(据我所知):1.创建一个“树访问者”并处理值和 2.通过“几乎复制”语法定义来创建树解析器。在 v2 的情况下,我可以将树节点装饰成我喜欢的任何方法,然后在解析器运行后通过从根节点调用类似“执行”的方法来调用它们。
标签: tree antlr antlr3 tree-nodes heterogeneous