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

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

单于旭东
2023-03-14

我已经将我的组合语法分解为两种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';

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

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

我尝试了两种选择:

>

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

    <代码>选项{语言=Java;tokenVocab=FluentLexer;}

    使用第一个选项ANTLR甩了我:

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

    错误(126):FluentParser. g4:7:30:无法在非组合语法中为字符串文字创建隐式标记:')'

    错误(126):FluentParser。g4:3:12:无法为非组合语法中的字符串文字创建隐式标记:“强制”

    错误(126):FluentParser。g4:4:15:无法为非组合语法中的字符串文字创建隐式标记:“parameterized”

    错误(126):FluentParser。g4:5:12:无法为非组合语法中的字符串文字创建隐式标记:“parameter”

    ...

    似乎Lexer规则是进口的。

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

    错误(126):FluentParser。g4:10:16:无法为非组合语法中的字符串文字创建隐式标记:'('

    错误(126):FluentParser。g4:10:30:无法为非组合语法中的字符串文字创建隐式标记:')'

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

    我怎样才能解决这个问题?我想用“(”或“)”代替LEXER规则。。。

  • 共有1个答案

    芮念
    2023-03-14

    这是仅适用于组合语法的功能。可能有助于加快开发/原型设计。但是,使用lexer规则“更好”。请参阅:此Q

    我怎样才能解决这个问题?我想用“(”或“)”代替LEXER规则。。。

    你不能用单独的语法。

     类似资料:
    • 这是我的XML解析器语法: 和lexer: 但是,当我使用以下命令检索C#代码中的STRING位时,这是有效的: 我把文本用引号括起来,比如:“hello”,而不是hello。因此,我尝试将解析器语法更改为: 或 我得到了错误:“无法在非组合语法中为字符串文字创建隐式标记” 我很困惑,为什么解析器语法中允许“=”而不是引号,以及如何更改解析器以检索没有引号的文本。而且,lexer似乎已经处理掉了引

    • 我在几乎所有的系统上都会看到“令牌语法错误,请删除这些令牌”。出来系统第一个实例后的println文本。出来普林顿。我不知道这意味着什么,也不知道如何解决?我是一个非常新的开始,所以这个代码中可能有多个错误。我还得到了“令牌上的语法错误”“Double is”“无效的AssignmentOperator”“和”“squared is”“,以及无效的AssignmentOperator”错误。这是一

    • 我有一个用盐散列加密密码的类。 但是,如果要向类传递null,则会出现以下错误: 当我使用类时,我得到错误:“不能隐式转换类型字符串到Byte[]”

    • 我有一个字符串“ECET”,我想创建所有可能的字符串,其中我用“X”替换一个或多个字母(除第一个外)。 在这种情况下,我的结果是: 关于如何处理这个问题有什么想法吗? 这不仅仅是创建“X”的可能组合/排列,还包括如何将它们与现有字符串组合。

    • 本文向大家介绍C语言创建字符串数组,包括了C语言创建字符串数组的使用技巧和注意事项,需要的朋友参考一下 例子 字符串数组可能意味着两件事: 元素为char *s的数组 其元素的数组的数组char小号 我们可以像这样创建一个字符指针数组: 请记住:当我们将字符串文字分配给时char *,字符串本身将分配在只读内存中。但是,该数组string_array分配在读/写内存中。这意味着我们可以修改数组中的

    • 问题内容: 根据guido(以及其他一些Python程序员)的说法,隐式字符串文字串联被认为是有害的。因此,我试图识别包含此类串联的逻辑行。 我的第一次(也是唯一的尝试)是使用; 我曾想过用来分割逻辑线,所以我将确定用引号引起来的部分,如果这些部分彼此相邻,则将其视为“文字级联”。 但是,这在多行字符串上失败,如以下示例所示: 我可以调整这是一些奇怪的临时方法,但是我想知道您是否可以想到一个简单的