微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

antlr4 的小问题:text==null 不知道为什么

如何解决antlr4 的小问题:text==null 不知道为什么

我有一个已经有效的语法,我重新激活了。 现在它不再起作用了。 重点是两条规则

parseRule 
@init {
   this.targets = new HashSet<Category>();
} // init 
    : (|->)? Name ( Trans '(' parseTargets ')' ) (->|)?
        {
            Category cat = new Category($Name.text);
            if ($startup.text != null) {
                this.carGr.addStart(cat);
            }
            if ($Finish.text != null) {
                this.carGr.addStop(cat);
            }
            this.carGr.addRule(cat,targets);
        }
    ;

很简单,忽略可选部分,我只是解析一个名称和目标如下:

parseTargets : (Name parseTargets?)
        {System.out.println("targets: "+targets);
    System.out.println("name: "+$Name.text);
    if ($Name.text != null){
    this.targets.add(new Category($Name.text));}};

我认为,在解析的每个实例中,Name 都必须存在,因此:$Name.text!=null。 所以我不需要如果。 真相是不同的。 谁能解释一下???

解决方法

如评论中所述,(|->)? 不正确。它可能是 v3 语法的残余:删除它们。此外,还有对不存在的 StartupFinish 规则的引用。以下内容将正确地将 Name 规则的内容打印到您的控制台:

parseRule
 : Name Trans '(' parseTargets ')'
   {
     System.out.println($Name.text);
   }
 ;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。