如何解决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 语法的残余:删除它们。此外,还有对不存在的 Startup
和 Finish
规则的引用。以下内容将正确地将 Name
规则的内容打印到您的控制台:
parseRule
: Name Trans '(' parseTargets ')'
{
System.out.println($Name.text);
}
;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。