如何在JParsec(3)中获取匹配输入的位置?

时间:2014-04-15 13:59:32

标签: java dsl parsec jparsec

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

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

    我该怎么做?

    谢谢!

1 个答案:

答案 0 :(得分:0)

这似乎是一个非常受欢迎的主题,因为有一些PR和与此相关的问题。这是最新的https://github.com/abailly/jparsec/pull/16,它发布了2.1(在maven中心提供)。有一个冗长的讨论(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) {...}
}