0

我正在使用 JParsec3 创建一个 DSL。解析/链接分两个阶段完成:

  1. 将语言解析为中间对象
  2. 链接对象并将其转换为可执行对象

在第 1 阶段创建的对象可以引用其他尚未解析的对象,因此需要 2 次。现在,对于链接错误消息,我需要将用户发送到文件中他们引用不存在的项目的位置。为此,我需要将位置附加到中间对象。

我怎么做?

谢谢!

4

1 回答 1

0

这似乎是一个非常受欢迎的话题,因为有几个 PR 和与此相关的问题。这是最新的https://github.com/abailly/jparsec/pull/16,它发布了 2.1(在 maven Central 中可用)。进行了长时间的讨论(https://github.com/abailly/jparsec/issues/5),设想了各种解决方案,但我们决定不包括该Locatable功能(还没有?)。

所以基本上,从 2.1 开始,您可以使用withSource()组合器或返回流中已解析位置的“老式”INDEX 解析器。这是来自@fluentfuture 的建议:

Mapper.curry(LocationAnnotated.class).sequence(Parsers.INDEX, parser, Parsers.INDEX);

public class LocationAnnotated<T> {
   public LocationAnnotated(int begin, T value, int end) {...}
}
于 2014-04-16T20:03:50.617 回答