我正在用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] );
}
}
在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中。 如果您需要更多详细信息,