ANTLR 外来输入 x 期望 x
ANTLR extraneous input x expecting x
我正在尝试匹配一个非常基本的 ANTLR 语法。但是 ANTLR 一直告诉我他得到了输入 '.'并期待“。” .
完整的错误是:
line 1:0 extraneous input '.' expecting '.'
line 1:2 missing '*' at '<EOF>'
配合语法:
grammar regex;
@parser::header
{
package antlr;
}
@lexer::header
{
package antlr;
}
WHITESPACE : (' ' | '\t' | '\n' | '\r') -> channel(HIDDEN);
COMP : '.';
KLEENE : '*';
start : COMP KLEENE;
并输入:
.*
两个文件具有相同的字符集:
regex.g: text/plain; charset=us-ascii
test.grammar: text/plain; charset=us-ascii
应该没有混淆 Lexer 规则。为什么这不能按预期工作?
鉴于您的示例语法和此测试 class:
import org.antlr.v4.runtime.*;
public class Main {
public static void main(String[] args) {
String source = ".*";
regexLexer lexer = new regexLexer(CharStreams.fromString(source));
regexParser parser = new regexParser(new CommonTokenStream(lexer));
System.out.println(parser.start().toStringTree(parser));
}
}
以下内容打印到我的控制台:
(start . *)
我猜你要么简化了语法,导致原始语法中的错误消失,要么你没有生成新的 lexer/parser classes.
我正在尝试匹配一个非常基本的 ANTLR 语法。但是 ANTLR 一直告诉我他得到了输入 '.'并期待“。” .
完整的错误是:
line 1:0 extraneous input '.' expecting '.'
line 1:2 missing '*' at '<EOF>'
配合语法:
grammar regex;
@parser::header
{
package antlr;
}
@lexer::header
{
package antlr;
}
WHITESPACE : (' ' | '\t' | '\n' | '\r') -> channel(HIDDEN);
COMP : '.';
KLEENE : '*';
start : COMP KLEENE;
并输入:
.*
两个文件具有相同的字符集:
regex.g: text/plain; charset=us-ascii
test.grammar: text/plain; charset=us-ascii
应该没有混淆 Lexer 规则。为什么这不能按预期工作?
鉴于您的示例语法和此测试 class:
import org.antlr.v4.runtime.*;
public class Main {
public static void main(String[] args) {
String source = ".*";
regexLexer lexer = new regexLexer(CharStreams.fromString(source));
regexParser parser = new regexParser(new CommonTokenStream(lexer));
System.out.println(parser.start().toStringTree(parser));
}
}
以下内容打印到我的控制台:
(start . *)
我猜你要么简化了语法,导致原始语法中的错误消失,要么你没有生成新的 lexer/parser classes.