gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:42:25 25 4
gpt4 key购买 nike

我已将组合语法分解为两个词法分析器和解析器语法:

组合语法非常简单,例如:

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';

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

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

我尝试了两种选择:

  • 在 Fluent Grammar 中导入 FluentLexer:导入 FluentLexer
  • 具有选项结构:

    选项{
    语言=Java;
    tokenVocab = FluentLexer;
    }

使用第一个选项 ANTLR 会抛弃我:

cannot create implicit token for string literal in non-combined grammar: '('

error(126): FluentParser.g4:7:30: cannot create implicit token for string literal in non-combined grammar: ')'

error(126): FluentParser.g4:3:12: cannot create implicit token for string literal in non-combined grammar: 'mandatory'

error(126): FluentParser.g4:4:15: cannot create implicit token for string literal in non-combined grammar: 'parameterized'

error(126): FluentParser.g4:5:12: cannot create implicit token for string literal in non-combined grammar: 'parameter'

...

看来 Lexer 规则已导入。

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

error(126): FluentParser.g4:10:16: cannot create implicit token for string literal in non-combined grammar: '('

error(126): FluentParser.g4:10:30: cannot create implicit token for string literal in non-combined grammar: ')'

为什么我需要在单独的语法中定义“)”和“(”,而为什么不需要在组合语法中定义它们?

我该如何解决这个问题?我想使用 '(' or ')' 代替 LEXER 规则...

最佳答案

该功能仅适用于组合语法。可能有助于加快开发/原型(prototype)设计。但是,使用词法分析器规则“更好”。请参阅:此问答:Is "Implicit token definition in parser rule" something to worry about?

How could I solve that? I want to use '(' or ')' insted of a LEXER rule...

在单独的语法的情况下你不能。

关于java - 无法为非组合语法中的字符串文字创建隐式标记 : '(' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34470790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com