gpt4 book ai didi

java - Java 中使用空格引发 Antlr NoViableAltException

转载 作者:行者123 更新时间:2023-12-01 04:52:34 27 4
gpt4 key购买 nike

我在 Antlr 3 中定义了一个简单的语法,如下所示:

grammar StringProcessor;

options {
output=AST;
}

@header {
package com.processor;
}

@rulecatch {
// ANTLR does not generate its normal rule try/catch
catch(RecognitionException e) {
throw e;
}
}

truevalue : 'true';
falsevalue : 'false';
nullvalue : 'null';
simpleValue : truevalue | falsevalue | nullvalue | STRING | INTEGER | FLOAT;
INTEGER : '0'..'9'+;
FLOAT : INTEGER'.'INTEGER;
QUOTE : '"';
SPECIALCHAR : '-'|':'|';'|'('|')'|'£'|'&'|'@'|','|'!'|'['|']'|'{'|'}'|'#'|'^'|'*'|'+'|'='|'_'|'<'|'>'|'€'|'$'|'%'|'/'|'.'|'?'|'~'|'|';
STRING : QUOTE('a'..'z'|'A'..'Z'|INTEGER|SPECIALCHAR|WS)+QUOTE;
WS : (' '|'\t'|'\f'|'\n'|'\r')+ {skip();}; // handle white space between keywords

当我在 AntlrWorks 的解释器中尝试以下字符串时:

“5Java 开发人员”

这有效。它包括空白区域。但是当我尝试从 Java 程序中解析它时,它抛出 NoViableAltException。我看过其他帖子,但这些解决方案不适用于我的问题。 WS 是 STRING 的一部分。问题是 Java 程序不会解析任何带有空格的内容,而解释会正确显示。

显示异常的示例:

public static void main(String[] args) throws Exception {
String input = ("\"5Java Developer\"");
StringProcessorParser parser = buildParser(input);
CommonTree commonTree = (CommonTree) parser.simpleValue().getTree(); // exception thrown
}

public static StringProcessorParser buildParser(String query) {
CharStream cs = new ANTLRStringStream(query);
// the input needs to be lexed
StringProcessorLexer lexer = new StingProcessorLexer(cs);
CommonTokenStream tokens = new CommonTokenStream();
StringProcessorParser parser = new StringProcessorParser(tokens);
tokens.setTokenSource(lexer);
// use the ASTTreeAdaptor so that the grammar is aware to build tree in AST format
parser.setTreeAdaptor((TreeAdaptor) new ASTTreeAdaptor().getASTTreeAdaptor());
return parser;
}

拥有:

    input = new String("\"5JavaDeveloper\""); correctly parses.

知道为什么这不起作用。

编辑:

我还尝试添加 $channel = HIDDEN;

但是还是不行

WS : (' '|'\t'|'\f'|'\n'|'\r')+ { $channel = HIDDEN; skip();}; // handle white space between keywords

最佳答案

删除skip()解决了我的问题。

关于java - Java 中使用空格引发 Antlr NoViableAltException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727869/

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