问题标签 [uu-parsinglib]

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 回答
4863 浏览

parsing - Parsec 或 happy (with alex) 或 uu-parsinglib

我将编写一个verilog(或vhdl)语言的解析器,并对解析的数据进行大量操作(某种转换)。我打算解析非常大的文件(完整的 Verilog 设计,大至 10K 行),我最终将支持大部分 Verilog。我不介意打字,但我不想在添加对其他规则的支持时重写代码的任何部分。

在 Haskell 中,您会推荐哪个库?我知道 Haskell 并且之前使用过 Happy(玩)。我觉得使用 Parsec 来转换代码中的解析字符串是有可能的(这是一个很大的优势)。我没有使用 uu-paringlib 的经验。

那么要解析verilog/VHDL的完整语法,推荐使用其中的哪一个?我主要关心的是我可以随心所欲地操纵解析数据的易用性和“正确性”。速度不是主要问题。

0 投票
2 回答
1107 浏览

parsing - 在解析器组合器中组合词法分析器和解析器

我正在使用uu-parsinglib,但我认为以下问题是解析器组合器通用的。

让我们考虑以下示例:

我有一个带有组合器的词法分析器pLex,它产生一个标记列表(类型MyToken)。我现在想编写一个解析器,它将使用令牌并构建一个AST.

连接词法分析器和解析器的最佳方法是什么?现在我有一个lex功能:

我应该创建一个函数parse p = ...吗?如果是,我如何构造它来跟踪来自词法分析器的列和行?或者我应该创建一个parserCombinator, 它会pLex以某种方式使用组合器?

0 投票
1 回答
183 浏览

parsing - 如何在 uu-parsinglib Haskell 解析器组合器中保持状态

我希望能够在编写解析器组合器时使用getput函数。State Monaduu-parsinglib

如何才能做到这一点?我可以使用这个库以某种方式创建状态解析器吗?

0 投票
1 回答
100 浏览

parsing - 在 Haskell 的 uu-parsinglib 中自定义错误处理

是否有可能:

  1. uu-parsinglib在 Haskell中使用自定义解析器错误?(我特别想打印带有位置信息的自定义错误消息)
  2. 自定义向用户显示错误的方式?
  3. 以某种方式控制自动校正发生的位置,而不是哪里?例如,我想拒绝一些自动更正步骤,例如删除标识符的第一个字母,如果它是大写的(标识符应该以小写开头)
0 投票
1 回答
244 浏览

parsing - Correctly parsing line indentations in uu-parsinglib in Haskell

I want to create a parser combinator, which will collect all lines below current place, which indentation levels will be greater or equal some i. I think the idea is simple:

Consume a line - if its indentation is:

  • ok -> do it for next lines
  • wrong -> fail

Lets consider following code:

Which gives following output:

The result for s1 is correct. The result for s2 should consume first "a" and stop consuming. Where this error comes from?

0 投票
1 回答
223 浏览

parsing - 使用 uu-parsinglib 进行单子解析

我正在尝试使用 uu_parsinglib 创建一个 Monadic 解析器。我以为我已经涵盖了,但我在测试中得到了一些意想不到的结果

我的解析器的一个精简示例是:

pName 是一个模棱两可的解析器。我想要类型解析器做的是应用一个后过滤器,并返回所有满足 nameFilter 的替代方案,包装为 ASTType。

如果没有,它应该会失败。

(我意识到如果列表中有多个有效匹配项,我给出的示例将失败,但该示例服务于它的目的)

现在,据我所知,这一切都有效。问题在于当您在更复杂的语法中使用它时,似乎会出现奇怪的匹配。我怀疑问题是 addLength 0 部分

我想做的是将单子和应用部分分开。使用过滤组件创建一元解析器,然后使用 <**> 运算符应用 pName。

或者

对于 addLength 正在做什么,我会接受一个非常好的解释。

0 投票
3 回答
375 浏览

parsing - 无法计算解析器的最小长度 - Haskell 中的 uu-parsinglib

让我们看看代码片段:

如果我在解析器中将此代码更改为:

我有一个错误:

我认为上述解析器的行为方式应该相同。为什么会出现这个错误?

编辑

上面的例子非常简单(为了简化问题),如下所述,这里没有必要使用 do 表示法,但我希望它使用的真实情况如下:

我注意到在 do 语句之前添加“addLength 1”可以解决问题,但我不确定它是否是正确的解决方案:

0 投票
1 回答
160 浏览

parsing - uu-parsinglib 中的计划外贪婪行为

问题

今天遇到一个问题,不知道怎么解决。这对我来说很奇怪,因为我写的代码应该(根据我目前的知识)是正确的。

因此,您可以在下面找到示例解析器组合器。最重要的是pOperator,它以非常简单的方式(仅用于演示目的)构建了一个运算符 AST。它消耗“x”并且可以消耗多个由空格分隔的“x”。

我还有pParens组合器,其定义如下:

所以它在关闭括号之前消耗空格。

样本输入/输出

正确的输入/输出应该是:

但我得到:

但是在第二个示例中,我遇到了错误-解析器的行为就像它贪婪地吃掉了一些令牌(并且没有贪婪的操作)。

我会感谢任何帮助。

示例代码

重要的

相当于:

根据:组合器解析:简短教程

它用于定义运算符优先级。

0 投票
1 回答
309 浏览

parsing - 分析使用 Haskell 中的解析器组合库编写的解析器

分析在 Haskell 的解析器组合库中编写的解析器的标准方法是什么?

我目前正在使用uu-parsinglib,但我很想知道分析其他解析器组合库的方法,如Parsec.

现在我已经编写了我的解析器,它很慢并且占用了很多内存(对于 600 行输入文本,解析超过 1Gb 的内存大约需要 5 秒,我想研究如何改进它)

0 投票
3 回答
499 浏览

parsing - 在 Haskell 中将一个字符插入到解析器组合器字符流中

这个问题与 和 都Parsec有关uu-parsinglib。当我们编写解析器组合器时,它们会处理来自编译器的字符流。是否有可能解析一个字符并将其放回(或返回另一个字符)到输入流?

例如,我想解析输入“test + 5”,解析t, e, s,t并在识别test模式后,将例如v字符放回字符流中,因此在继续解析过程时,我们正在匹配v + 5

我现在不想在任何特定情况下使用它——我想深入了解这些可能性。