无法为非组合语法中的字符串文本创建隐式标记:'('



我已经将组合语法分解为两种Lexer和Parser语法:

组合语法很简单,比如:

parser grammar Fluent;
fluent
 : MANDATORY
 | PARAMETRIZED '(' PARAMETER ')'
 | OPTIONS OPTION?
 | CHOOCING ( CHOOSE1 | CHOOSE2 )
 | PLUS+
 ;
MANDATORY : 'mandatory';
PARAMETRIZED : 'parameterized';
PARAMETER : 'parameter';
OPTIONS : 'options';
OPTION : 'option';
CHOOCING : 'choosing';
CHOOSE1: 'choise1';
CHOOSE2: 'choise2';
PLUS: 'plus';

然后,我创建了一个带有lexer规则的FluentLexer.g4和一个带有解析器规则的FluentParser.g4

然后我在FluentParser语法上导入了FluentLexer语法。

我试过两种选择:

  • 在Fluent Grammar中导入FluentExer:import FluentLexer
  • 具有期权结构:

    options{ language = Java; tokenVocab = FluentLexer; }

使用第一个选项ANTLR转储我:

无法在非组合语法中为字符串文字创建隐式标记:"("

错误(126):FluentParser.g4:7:30:无法为非组合语法中的字符串文字创建隐式令牌:")"

错误(126):FluentParser.g4:3:12:无法为非组合语法中的字符串文字创建隐式令牌:"强制"

错误(126):FluentParser.g4:4:15:无法在非组合语法中为字符串文字创建隐式令牌:"参数化"

错误(126):FluentParser.g4:5:12:无法在非组合语法中为字符串文字创建隐式令牌:"parameter"

Lexer规则似乎是导入的。

对于第二个选项,ANTLR只告诉告诉:

错误(126):FluentParser.g4:10:16:无法为非组合语法中的字符串文字创建隐式令牌:"("

错误(126):FluentParser.g4:10:30:无法为非组合语法中的字符串文字创建隐式令牌:")"

为什么我需要在分离语法中定义")"one_answers"(",为什么我不需要在组合语法中定义它们?

我该怎么解决?我想用'(' or ')'代替LEXER规则。。。

这是一个仅适用于组合语法的功能。可能有助于加快开发/原型设计。然而,使用lexer规则"更好"。请参阅:本问答;A: 是";语法分析器规则中的隐式标记定义";有什么好担心的吗?

我该怎么解决?我想使用"("或")"代替LEXER规则。。。

你不能用单独的语法。

相关内容

  • 没有找到相关文章

最新更新