当前位置: 首页 > 知识库问答 >
问题:

ANTLR4中重复令牌的计数

翟鸿振
2023-03-14

我正在用ANTLR4/JavaScript编写一个简单的“语言”,它可以将数字与变量关联起来并打印出来。这很好,但是在扩展print语句以获取一个或多个变量之后,我不知道如何获得它们的计数。(我使用的是访问者,而不是倾听者,但我对两者都感兴趣。)

语法:

print   : 'print' 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] );
    } 
}

共有1个答案

范承望
2023-03-14

visitprint方法中,可以获得一个printcontext成员ID()。这将返回一个数组,您可以简单地使用context.ID().length来获取ID计数(注意:没有参数)。

 类似资料:
  • 我需要编写一个Java程序,使用,在给定一个源文件和一个方法的情况下,可以计算变量、运算符、标点符号和保留字的数量。 如何使用根据标记的类型对其计数?

  • 我正在为一种语言编写一个编译器,作为大学使用ANTLR4的项目。我使用Java编写了这个编译器,并采用了Visitor模式,当我到达测试阶段时,我注意到ANTLR忽略了我的部分代码,并生成了它不应该生成的错误。 语法: 以下是我的主要观点: 当我运行Main时,它显示: 第1行:0不匹配的输入'import'应为{(',INT,FLOAT,STRING,IDF} 我的语法有什么地方错了吗?如果没有

  • 我们如何才能让他们识别lexer规则?所有、和规则都可能与匹配。那么我在测试它的时候应该使用什么类型。 我的意思是: 一般来说,我想了解如何知道的类型?

  • 我是一个Antlr4新手,有一个相对简单的语法问题。语法在末尾的底部给出。(这是一个语法片段,用于分析生物序列变体的描述)。 在下面的单元测试中,我试图解析字符串。 这里出了什么问题?我在哪里可以学习如何解决这个问题?

  • ANTLR4书引用了一个多模式示例 https://github.com/stfairy/learn-antlr4/blob/master/tpantlr2-code/lexmagic/ModeTagsLexer.g4 https://github.com/stfairy/learn-antlr4/blob/master/tpantlr2-code/lexmagic/ModeTagsParser.

  • 将标记移动到公共文件之前的语法 将标记移动到公共文件后的语法 通用lexer由其他3个lexer导入。它具有共享的标识符令牌。 以下lexer导入通用lexer,并具有几种模式 解析器语法: 结果:一个命令,如“删除资源:A先前标识为COMMAND\u START now的将被识别为标识符。 结果屏幕截图 问题:我如何解决这个问题?标识符应保留在CommonLexer中。 如果您需要更多详细信息,