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

ANTLR4:隐式或显式令牌定义

相俊迈
2023-03-14
grammar SimpleTest;

top: library | module ;

library: 'library' library_name ';' ;
library_name: IDENTIFIER;         

module: MODULE module_name ';' ;
module_name: IDENTIFIER;

MODULE: 'module' ;
IDENTIFIER: [a-zA-Z0-9]+;
T__0=1
T__1=2
MODULE=3
IDENTIFIER=4
'library'=1
';'=2
'module'=3

如果我对'Library'“令牌”不感兴趣,因为规则已经建立了我要匹配的对象,而且我无论如何都要跳过它,那么用Library和令牌声明替换它有意义吗?(然后,代币的数量将会增加。)为什么在ANTLRWorks中这是一个警告?

共有1个答案

薛弘阔
2023-03-14

实际上,隐式和显式令牌之间是有区别的:

摘自“ANTLR4最终参考”,第76页:

ANTLR收集并从解析器规则中分离所有字符串文本和lexer规则。像'enum'这样的字词成为词法规则,并且紧接在解析器规则之后,但在显式词法规则之前。

 类似资料:
  • 我正在尝试创建一个目前仅限使用的简单整数算术表达式解析器。目前我有: 规则ExpressionList似乎会导致一些问题。如果我删除所有包含ExpressionList的内容,一切都会编译并且似乎运行良好。但像上面一样,我收到了以下错误: 我正在使用Eclipse和Antlr4插件。我试图根据antlr4书中给出的cymbol语法来确定自己的方向。 有人能告诉我我的小语法出了什么问题吗?

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

  • 我想要一些关于如何在隐式授予流中使用ID令牌和访问令牌的澄清。我有一个使用msal.js for Angular包的Angular SPA和一个Web API。API不调用任何外部服务,如MSFT Graph。后端仅使用JWT中的角色声明来建立对API功能的RBAC授权。 这个文档写着:https://docs.microsoft.com/en-us/azure/active-directory/

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

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

  • 是否有方法为模式中捕获的所有字符返回一个字符串类型的标记,包括导致进入模式的字符? 模式何时结束? 我知道我也可以像这样编写字符串标记: