gpt4 book ai didi

parsing - ANTLR 解析中的不确定性

转载 作者:行者123 更新时间:2023-12-04 06:23:06 25 4
gpt4 key购买 nike

如果我有一个 ANTLR 语法如下:

grammar Test;
options {
language = Java;
}

rule : (foo | bar);


foo : FOO ',' FOO;
bar : BAR;

FOO: ('0'..'9')+;
BAR: ('a'..'z' | 'A'..'Z' | '0'..'9' | ' ')+;
WHITESPACE: (' ' | '\t')+ { $channel=HIDDEN; };

我使用了一个测试字符串:

12abc3

这(我相信)是 BAR满足 bar 的 token 规则并被解析为这样。太棒了。

但是,如果我有这个字符串:
12

我收到 line 1:2 mismatched input '' expecting ','
这似乎相当不确定,尽管我确定不是。我知道我已经因为有两个 token 而陷入困境: FOOBAR接受数字。但是如果解析器要成功或失败,它应该始终如一地成功或失败。换句话说,在第一种情况下,第一个字符是 1 并且显然被评估为 BAR 的成员。 token ,因此解析器走上了一条成功的道路。在第二种情况下,相同的第一个字符被评估为 FOO token 因此路径注定会失败,尽管字符串可能是成功的 bar解析。为什么不一致?或者我是否缺少关于 ANTLR 和/或解析的更基本的东西?

最佳答案

ANTLR 在看到下一个标记(或 EOF)的第一个字符之前不会确定标记类型。 ANTLR 还将尝试最长的匹配,这就是为什么您将“12abc3”视为 BAR 而不是 FOO BAR。在第二种情况下,ANTLR 将使用 FOO 表示 '12',因为它在语法中首先列出。

ANTLR basics

ANTLR lexers

关于parsing - ANTLR 解析中的不确定性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338466/

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