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

ANTLR4给出不匹配的输入,因为括号被插入到令牌中

宫瀚
2023-03-14

ANTLR4.5给了我一个“不匹配的输入”String[]'期待'String'“,但我不明白为什么'[]'被包含在令牌中。

我已经把语法精简到最低限度,以显示问题:

grammar Test;    
@header
{
package parser;
}

mainClass : 'class' ID '{' 'void' 'main' '(' 'String' '[' ']' ID ')' '}' ;

ID : [a-zA-Z] [a-zA-z0-9]* ;

WS : [ \t\f\r\n]+ -> channel(HIDDEN);
class A
{
    void main(String[] args)
}

我就是搞不清楚出了什么问题。

共有1个答案

郤飞英
2023-03-14

尝试为每个令牌定义lexer规则。我想知道如何使用这种语法生成解析器。ANTLR通常会吐出一条消息,它不能隐式地从文本生成lexer令牌。

 类似资料:
  • 我是ANTLR的新手。我想写一个语法来解析下面的输入: 语法如下:: 当我尝试使用语法解析上述输入时,它会引发以下异常:: 第1行:0不匹配的输入'commit a1b2c3d4',应为'commit' 我已经引用了ANTLR4:不匹配的输入链接,但仍然不清楚发生了什么。

  • 我是一个Antlr4新手,有一个相对简单的语法问题。语法在末尾的底部给出。(这是一个语法片段,用于分析生物序列变体的描述)。 在下面的单元测试中,我试图解析字符串。 这里出了什么问题?我在哪里可以学习如何解决这个问题?

  • 我刚开始使用ANTLR4。我试图为一个简单的程序编写语法规则,但我很难让它工作。 null 任何帮助都很感激!

  • 我对Scanner有一个问题,因为它似乎采用输入值类型并强制用户下次输入值为相同类型。我找不到此代码不起作用的任何原因,并给我一个InputMismatchException,因为我已经编写了一百万次这样的代码并且没有问题。 这个问题不仅仅是register()方法的问题,而是整个程序的问题,例如下面的代码: 如果其中一种方法(如 register)要求用户输入字符串,则 int user=inp

  • 我有一个现有的语法,我正在使用C#输出将其转换为Antlr4。它在第一个标记上失败,消息不匹配的输入'BEGIN'需要any_word。奇怪的是,当我打印出令牌以查看它被识别为什么令牌时,它表明它已经正确地识别了它。

  • 标准的TestCase之一是,lexer应该从中生成令牌流。不幸的是,由于ANTLR优先匹配较长的令牌,它生成令牌流,这将导致解析器引发错误。 是否可以先让ANTLR4 lexer尝试使用较短的令牌进行匹配?向添加lookahead-type规则并不是一个很好的解决方案,因为我需要考虑各种潜在的词法冲突(例如,被命名为,而不是,等等)。 编辑: 但这并不是一个真正的可扩展或可维护的解决方案,而且还