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

Java 如何在JParsec(3)中获得匹配输入的位置?,java,dsl,parsec,jparsec,Java,Dsl,Parsec,Jparsec,我正在使用JParsec3创建一个DSL。解析/链接分两个阶段完成: 将语言解析为中间对象 链接对象并将其转换为可执行对象 在阶段1上创建的对象可以引用尚未解析的其他对象,因此有两个过程。 现在,对于链接错误消息,我需要将用户发送到文件中引用不存在项的位置。为此,我需要将位置附加到中间对象 我该怎么做 谢谢 这似乎是一个非常受欢迎的话题,因为有一些PRs和与此相关的问题。以下是最新发布的2.1版(可在maven central中获得)。对各种设想的解决方案进行了长时间的讨论(),但我们决定不包括

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

  • 将语言解析为中间对象
  • 链接对象并将其转换为可执行对象
  • 在阶段1上创建的对象可以引用尚未解析的其他对象,因此有两个过程。 现在,对于链接错误消息,我需要将用户发送到文件中引用不存在项的位置。为此,我需要将位置附加到中间对象

    我该怎么做


    谢谢

    这似乎是一个非常受欢迎的话题,因为有一些PRs和与此相关的问题。以下是最新发布的2.1版(可在maven central中获得)。对各种设想的解决方案进行了长时间的讨论(),但我们决定不包括
    Locatable
    功能(还没有?)

    因此,基本上,从2.1开始,您可以使用
    withSource()
    combinator或“老式”索引解析器,返回流中已解析的位置。以下是@fluentfuture的提案:

    Mapper.curry(LocationAnnotated.class).sequence(Parsers.INDEX, parser, Parsers.INDEX);
    
    public class LocationAnnotated<T> {
       public LocationAnnotated(int begin, T value, int end) {...}
    }
    
    Mapper.curry(LocationAnnotated.class).sequence(Parsers.INDEX,parser,Parsers.INDEX);
    公共类位置注释{
    公共位置注释(int-begin,T-value,int-end){…}
    }