问题标签 [parsec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
936 浏览

haskell - 具有自定义令牌数据类型的 parsec-3.1.0

parsec-3.1.0 ( http://hackage.haskell.org/package/parsec-3.1.0 ) 适用于任何令牌类型。然而,像 Text.Parsec.Char.satisfy 这样的组合子只为 Char 数据类型定义。似乎没有更通用的对应物可用。

我应该定义自己的版本还是错过了什么?

也许 Haskell 中有不同的解析器库允许:

  • 自定义令牌类型
  • 自定义解析器状态(我需要解析有状态格式 - Wavefront OBJ)
0 投票
2 回答
1723 浏览

parsing - Haskell 的 Parsec 库可以用于实现带备份的递归下降解析器吗?

我一直在考虑使用 Haskell 的 Parsec 解析库来解析 Java 的子集作为递归下降解析器,以替代更传统的解析器生成器解决方案,如 Happy。Parsec 似乎很容易使用,解析速度对我来说绝对不是一个因素。不过,我想知道是否有可能使用 Parsec 实现“备份”,这是一种通过依次尝试每一个来找到要使用的正确产品的技术。举一个简单的例子,考虑 JLS Java 语法的最开始:

我想要一种不必弄清楚我应该如何订购这两个规则以使解析成功的方法。就目前而言,像这样的幼稚实现:

不会工作......像“15.2”这样的输入会导致整数解析器首先成功,然后整个事情会在“。”上窒息。象征。当然,在这种情况下,很明显可以通过重新排序两个产品来解决问题。不过,在一般情况下,找到这样的事情将是一场噩梦,而且我很可能会错过一些案例。理想情况下,我想要一种方法让 Parsec 为我找出这样的东西。这是可能的,还是我只是想对图书馆做太多事情?Parsec 文档声称它可以“解析上下文相关的无限前瞻语法”,所以看起来我应该可以在这里做点什么。

0 投票
1 回答
486 浏览

haskell - many1 不再适用于 Parsec 3.x

从 2.x 更新到 Parsec 3.1 后,使用 many1 的代码,例如word = many1 letter失败

我发现一个邮件列表帖子声称添加{-#LANGUAGE NoMonomorphismRestriction #-}到源文件的顶部可以解决问题,但它没有。

0 投票
1 回答
978 浏览

parsing - 使用 Haskell Parsec 自定义 whiteSpace

我想使用 ParsecmakeTokenParser来构建我的解析器,但我想使用我自己的whiteSpace. 执行以下操作将替换whiteSpace为我的定义,但所有lexeme解析器仍使用旧定义(例如P.identifier lexer,将使用旧空白)。

查看代码,makeTokenParser我想我明白它为什么会这样工作。我想知道是否有任何解决方法可以避免完全复制代码makeTokenParser

0 投票
1 回答
573 浏览

html - Parsec Haskell 列表

我正在使用Text.ParserCombinators.ParsecandText.XHtml来解析输入并获得 HTML 输出。

如果我的输入是:

我的输出应该是:

<ul><li>First item, First level <ul><li>First item, Second level </li><li>Second item, Second level </li></ul></li><li>Second item, First level</li></ul>

我写了这个,但显然不能递归工作

有任何想法吗?递归可以多于两个级别。
谢谢!

0 投票
1 回答
376 浏览

parsing - 使用 Parsec 的 Haskell Parse Paragraph 和 em 元素

我正在使用Text.ParserCombinators.ParsecText.XHtml来解析这样的输入:

this is the beginning of the paragraph --this is an emphasized text-- and this is the end\n

我的输出应该是:

<p>this is the beginning of the paragraph <em>this is an emphasized text</em> and this is the end\n</p>

此代码解析并返回一个强调的元素

但我不知道如何获得带有强调项目的段落

有任何想法吗?

谢谢!!

0 投票
2 回答
697 浏览

html - Haskell - Parsec 解析

元素

我正在使用Text.ParserCombinators.ParsecText.XHtml来解析这样的输入:

我的输出应该是:

<p>This is the first paragraph example\n with two lines\n</p> <p>And this is the second paragraph\n</p>

我定义:

但它返回:

<p>This is the first paragraph example\n with two lines\n\n And this is the second paragraph\n</p>

怎么了?有任何想法吗?

谢谢!

0 投票
1 回答
399 浏览

parsing - Haskell Parsec 项目计数

我正在使用Text.ParserCombinators.ParsecText.XHtml来解析这样的输入:

我的输出应该是:

我已经到了这一部分,但我无法进一步了解:

这没关系,但它不包括编号。

有任何想法吗?

谢谢!

0 投票
2 回答
2656 浏览

parsing - 在 Haskell 的 Parsec 中解析基于缩进的语法

我正在尝试使用 Parsec 在 Haskell 中解析基于缩进的语言(想想 Python、Haskell 本身、Boo、YAML)。我看过 IndentParser 库,看起来它是完美的匹配,但我不知道如何将我的TokenParser变成缩进解析器。这是我到目前为止的代码:

这会引发错误:

我究竟做错了什么?我应该如何创建一个IT.TokenParser?或者 IndentParser 是否损坏并应避免?

0 投票
2 回答
861 浏览

parsing - Haskell:将读取功能提升到解析解析器

作为这里第四个练习的一部分, 我想使用一个reads类型函数,比如readHex一个 parsec Parser

为此,我编写了一个函数:

可以使用,例如在 GHCI 中,如下所示:

任何人都可以建议在以下方面对这种方法进行任何改进:

  • 在返回的情况下,该术语(f s)是否会被记忆或评估两次? null (f s)False
  • 处理多个成功的解析,即当length (f s)大于一时,我不知道 parsec 如何处理这个问题。
  • 处理解析的其余部分,即(snd . head) (f s).