Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANTLR4由于括号包含在令牌中而提供不匹配的输入_Antlr4_Lexer - Fatal编程技术网

ANTLR4由于括号包含在令牌中而提供不匹配的输入

ANTLR4由于括号包含在令牌中而提供不匹配的输入,antlr4,lexer,Antlr4,Lexer,ANTLR 4.5给了我一个“不匹配的输入”字符串[]“预期为”字符串“,但我不明白为什么标记中包含“[]” 我已将语法精简到最低限度,以说明问题: 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]+ ->

ANTLR 4.5给了我一个“不匹配的输入”字符串[]“预期为”字符串“,但我不明白为什么标记中包含“[]”

我已将语法精简到最低限度,以说明问题:

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)
}
如果我使用“String[]”,则成功解析输入

如果我从解析树打印出标记,那么它们看起来都和我期望的一样,除了“String[]”显示为一个ID标记而不是3个单独的标记

我尝试过显式定义'String'、'['和']'标记,但结果是一样的


我就是想不出哪里出了问题。

试着为每个令牌定义lexer规则。我想知道如何用这种语法生成解析器。ANTLR通常会发出一条消息,说明它无法从文本隐式生成lexer标记。

哦,看到您期望的内容是很危险的

我将所有标记都更改为显式,结果相同

然后我改变了ID lexer规则,使用了两个片段,一个用于字母,一个用于数字,它成功了

我改回原来的规则,它仍然有效


对这个问题中发布的版本进行了非常仔细的检查,发现问题在ID lexer规则的大写范围内。它有A-z,但应该是A-z。A-z的范围包括
\[]^
,因此出现了问题。

我唯一想到的是,你的lexer规则正在相互冲突。尝试将它们转换为命名规则,而不仅仅是文字规则,并尝试按照规则的顺序进行操作。