antlr4如何修复lexer模式隐式令牌错误?

antlr4如何修复lexer模式隐式令牌错误?,antlr,antlr4,Antlr,Antlr4,我与一些文本发生了令牌冲突,并且正在考虑使用lexer模式来解决这些问题 我在Lexer文件中创建了模式,但当我编译解析器文件时,会收到以下警告: warning(125): TSqlParser.g4:2377:26: implicit definition of token DISK in parser warning(125): TSqlParser.g4:2377:31: implicit definition of token TAPE in parser warning(125):

我与一些文本发生了令牌冲突,并且正在考虑使用lexer模式来解决这些问题

我在Lexer文件中创建了模式,但当我编译解析器文件时,会收到以下警告:

warning(125): TSqlParser.g4:2377:26: implicit definition of token DISK in parser
warning(125): TSqlParser.g4:2377:31: implicit definition of token TAPE in parser
warning(125): TSqlParser.g4:2377:36: implicit definition of token URL in parser
我怎样才能解决这个问题

我的模式定义是:

BACKUP:                                'BACKUP' -> pushMode(BackupTokens);

mode BackupTokens:
DISK:                                  'DISK' -> popMode();
TAPE:                                  'TAPE' -> popMode();
URL:                                   'URL' -> popMode();

lexer语法中有几个错误:

  • 它不是
    popMode()
    ,而是
    popMode
  • 它不是
    模式备份:
    而是
    模式备份
因此,当您使用以下内容调用lexer语法时,
TSqlLexer

lexer语法TSqlLexer;
备份:“备份”->pushMode(BackupTokens);
模式后退;
DISK:'DISK'->popMode;
磁带:“磁带”->popMode;
URL:'URL'->popMode;
然后,您的解析器语法应该在其
选项{…}
块中包含适当的
tokenVocab

语法分析器TSqlParser;
选择权{
tokenVocab=TSqlLexer;
}
...
编辑 你知道模式块停在哪里吗?或者它运行到EOF

模式块在
EOF
或下一个
模式时停止

提示:在语法的最顶端定义
fragment
s,以便您可以在所有模式中使用这些
fragment
s:

lexer语法TSqlLexer;
备份:“备份”->pushMode(BackupTokens);
碎片数字:[0-9];
模式后退;
...
A_规则:数字;
模式其他模式;
...
一些规则:数字+;

谢谢。我从一个博客页面上删除了语法你知道模式块停在哪里吗?或者它会运行到EOF吗?@garyM检查我的编辑绝对棒极了。这是我找到的最清晰的文件之一。