gpt4 book ai didi

java - 无法针对情况编写 Antlr3 规则

转载 作者:行者123 更新时间:2023-12-01 07:46:49 26 4
gpt4 key购买 nike

我有一个特殊情况,我无法为此编写 Antlr3 解析器规则。

我有 5 个解析器规则,比方说:a、b、c、d 和 e。

条件:

  1. 它们可以按任意顺序排列。
  2. 每条规则都是可选的。
  3. 每个规则在语法中只能出现一次。
  4. 在语法中,要么是“a”,要么是“b”。两者不能同时出现在语法中。

可能的情况:

  • a c d e
  • c d e b
  • d e c a
  • d ca………… 等等

Antlr 是否提供了任何简单的方法来实现这一点?通过为每个规则组合实现规则是可能的。

最佳答案

ANTLR4 不允许实现您指定的所有条件。尤其是规则可以以任意顺序出现但只能出现一次的情况,任何解析器都几乎不支持。

但是,您可以使用两步方法。首先,允许所有规则以任意顺序出现。通常是这样完成的:

main: sub*;
sub: a | b | c;

解析之后,您可以执行另一个步骤(通常无论如何您都会有一个语义步骤,这也符合这里的条件)并检查生成的解析树中的出现情况。然后,您可以抛出一条详细的错误消息,告诉用户什么是不允许的(如果您尝试在解析器规则中这样做,即使不是不可能,这也是很棘手的)。 @sprinter 提出的方法也可以,但它不会给你任何有意义的错误消息,而只是告诉你规则 element 没有可行的 alt (这可能有很多原因,不仅仅是重复规则)。

通过第二步,您可以轻松应用任何附加条件(特定顺序、不能一起使用的规则等,而无需更改语法),这是您在解析步骤中无法做到的(因为您无法先行规则) )。

关于java - 无法针对情况编写 Antlr3 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50265797/

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