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

计数ANTLR4中的重复令牌

如何解决计数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] );
    } 
}

是否应该有更好的方法,例如count()方法

感谢您的回复

解决方法

如果您创建id解析器规则:

id
 : ID
 ;

,然后在所有其他解析器规则中使用此id规则而不是ID令牌,那么您可以覆盖visitId函数:

visitId(ctx) {
    // Check ctx.ID() here
}
,

在您的do_exit()方法中,您将获得一个具有成员visitPrint的{​​{1}}。这将返回一个数组,您可以简单地使用PrintContext来获取ID计数(注意:无参数)。

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