【问题标题】:How do I get the location of a matched input in JParsec(3)?如何在 JParsec(3) 中获取匹配输入的位置?
【发布时间】:2014-04-15 13:59:31
【问题描述】:

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

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

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

我该怎么做?

谢谢!

【问题讨论】:

    标签: java dsl parsec jparsec


    【解决方案1】:

    这似乎是一个非常受欢迎的话题,因为有几个 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) {...}
    }
    

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 2019-06-09
      相关资源
      最近更新 更多