0

我有一个规则,我有一个声明返回

tablename
    returns [String fieldString, TableObj obj]

TableObj 是我在同一个 g4 文件中声明的自定义类

class TableObj {
    public String realName;
    public String aliasName;
    public List<String> fields;
    public List<Relation> relations;

    public TableObj(){
       fields = new ArrayList<String>();
       relations = new ArrayList<Relation>();
    }
}

但是当我必须尝试使用​​ $obj.field 访问 obj 的字段时,生成的代码是:

_localCtx.field

代替

_localCtx.obj.field

如何获得第二种形式而不是第一种形式?

如果需要,或者它将有助于遵循我的规则片段

tablename
returns [String fieldString, TableObj obj]
:
    (tablePrefix=ID { 
                        $obj.aliasName = $tablePrefix.text;
                        System.out.println( "Alias = " + $tablePrefix.text + " " + $obj.aliasName );
                    }
;
4

1 回答 1

0

这是 ANTLR 中的一个错误,您应该向项目问题跟踪器报告: https ://github.com/antlr/antlr4/issues

于 2013-09-04T03:26:38.053 回答