如何解决计数ANTLR4中的重复令牌
我正在ANTLR4 / JavaScript中编写一个简单的“语言”,可以将数字与变量关联并打印出来。这很好用,但是在将print语句扩展为接受一个或多个变量后,我不知道如何获取它们的数量。 (我使用的是访客,而不是听众,但对两者都感兴趣。)
语法:
print : 'print' ID (',' ID)* ';' ;
我如何找出有多少个ID令牌?
目前,我一起黑客入侵了一些东西,
visitPrint( ctx ) {
let i = 0;
let c = undefined;
while( (c = ctx.ID(i)) ) {
let val = ctx.ID(i++).getText();
print( this.variables[val] );
}
}
感谢您的回复!
解决方法
如果您创建id
解析器规则:
id
: ID
;
,然后在所有其他解析器规则中使用此id
规则而不是ID
令牌,那么您可以覆盖visitId
函数:
visitId(ctx) {
// Check ctx.ID() here
}
,
在您的do_exit()
方法中,您将获得一个具有成员visitPrint
的{{1}}。这将返回一个数组,您可以简单地使用PrintContext
来获取ID计数(注意:无参数)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。