使用ANTLR4生成的访问器生成AST [英] Generate AST using ANTLR4 generated visitor

查看:12
本文介绍了使用ANTLR4生成的访问器生成AST的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将ANTLR3语法转换为ANTLR4语法,这意味着我必须删除所有树重写规则,因为它们现在必须在代码中实现,并且通过使用自定义Visitor访问ParseTree可以生成AST。

旧的语法重写了规则,防止了歧义,并自动生成了想要的树。我在网上找不到任何有用的资源来说明如何使用访问者/侦听器范例来实现这一点。

  1. AVisitor需要用作所有visit*函数的返回类型的类型。如果我需要生成AST,我应该使用什么返回类型?ANTLR3使用了CommonTree个对象。
  2. 输入visit*节点时,可以创建树的节点,但如何跟踪其父节点?
  3. 有没有树重写规则转换成生成AST节点的方法的例子?如果没有,是否可以为下面这样的规则提供一个示例?

这里是(3)的规则:

ctor_initializer: '::'? identifier '(' expr? ')' -> ^(CTOR_INITIALIZER^(INITIALIZER_ID '::'? identifier) ^(CTOR_EXPR expr?) );

Antlr4

习惯性地,推荐答案创建并支持使用解析树。不直接支持创建和修改AST。

优先选择语法分析树而不是语法分析树的一些动机因素是summarized here

Antlr4不排除构造AST--可以以任何所需的方式定义该结构。例如herehere

这篇关于使用ANTLR4生成的访问器生成AST的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆