问题标签 [fparsec]

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

f# - 如何将 FParsec 结果值提取到 FSI 中的变量

我正在使用 FParsec 并尝试将结果值绑定到 FSI 中的变量。我尝试了以下方法:

它似乎绑定然后忘记它,但我认为我错过了一些东西,因为以下解构有效:

以下函数似乎能够使用 match 语句提取值(尽管我需要根据解析器更改失败类型):

我有什么误解?

0 投票
1 回答
161 浏览

parsing - BNF fparsec 解析器中的错误

我制作了以下解析器来尝试解析 BNF:

为了测试,我根据维基百科在 BNF 的 BNF 上运行它:

但它总是失败并出现此错误:

我究竟做错了什么?


编辑

我用来测试的功能:

0 投票
1 回答
157 浏览

parsing - 在已标记化的 UInt16 流上使用 FParsec

我需要解析一个已经标记化的 type 流UInt16 seq
我怎样才能用 FParsec 做到这一点?我可以在关于s
的参考著作中找到所有顶级函数。charstream

目前我将UInt16s转换为 s ,char这看起来很愚蠢。

0 投票
0 回答
187 浏览

parsing - Fparsec 递归语法抛出 StackOverflowException

我有这个代码

当它评估时,它会抛出 StackoverflowExcpetion。所以问题是我如何在没有无限递归的情况下编写它?

0 投票
1 回答
288 浏览

parsing - FParsec 解析带括号的表达式

我正在编写我的第一个解析器。它在 F# 中,我正在使用 FParsec。

我的解析器解析诸如true and false, (true and false or true),等之类的东西true(((true and false or true)))这是正确的。

但是当它像(true and false) or true. 当文本中间有括号时,它会失败。

我该如何解决?

示例代码:

0 投票
1 回答
208 浏览

parsing - FParsec 只解析括号之间的 expr

我正在编写一个解析器(用于学习 pourpuses)。

我希望它解析像

没有问题......但我的解析器不“理解”前者。它看到40并认为“嗯,它是一个Literal Numeric 40”。

当我放括号时,我的解析器工作得很好。

我很难理解为什么。

解析器:

用法:

0 投票
1 回答
100 浏览

parsing - 使 OperatorPrecedenceParser 解析可选(opt)表达式

我正在实现一个解析器,它为我的项目实现特定领域的特定语言。

我遇到困难的一个方面是制作一个表达式(使用 FParsec 的 OperatorPrecedenceParser 实现),以便整个表达式是可选的。

我以与网络上的许多示例大致相同的方式实现了我的解析器 OPP。我还尝试改变行尾注释消耗空格的位置。我的尝试似乎都不适用于机器人案例(表达式和行尾注释都是可选的)

具体来说(如下面的示例中实现的),我试图让以下内容成功解析。

其中表达式是可选的,并且表达式后面有一个可选的注释。“KeyValue:”对于这个例子是硬编码的,但在我拥有的主解析器代码中,它是一个标识符。

注意以下示例。我已经实现了一个最小的表达式,它解析一个简单的中缀加法 2 个浮点数。完整的解析器实现了更多。

NB2。表达式必须在 : 和表达式之间至少有 1 个空格。# 注释字符根本不会出现在表达式中。

如何使表达式“可选”。请参阅下面的 eKeyValue FParsec 解析器类型。

下面的示例包含 6 个示例案例。所有案例都应该有效。我尝试将 wsBeforeEOL 添加到条款的末尾,使表达式可选(opt),但似乎没有任何效果。看起来 OPP 总是消耗,并且从不失败。

以下示例程序的输出如下所示:

示例程序为(以上测试用例在Main()函数中:

0 投票
1 回答
150 浏览

f# - FParsec 解析无序子句

我想解析一些语法,如下所示

子句的顺序GROUPBY TO USING可以变化,但每个子句最多出现一次。

在 FParsec 中是否有一种方便或内置的方法来解析它?我阅读了一些提到 Haskell Parsec permute 的问题和答案。FParsec 中似乎没有置换。如果这是要走的路,我将如何在 FParsec 中构建置换?

0 投票
1 回答
149 浏览

parsing - 如何解析 FParsec 中的同构列表?

我在尝试解析 FParsec 中的类似 json 的同类数组时遇到问题。我已将问题分解为一个重现它的简短示例。

当我使用该test功能进行尝试时,我得到以下结果:

如果我在使用运算符时交换了顺序P_INT_VALUE,则解析成功但失败并出现类似错误。所以基本上,我首先使用的解析器就是它试图使用的。P_BOOL_VALUE<|>[true,false][1,2,3]

我知道<|>如果 LHS 改变用户状态,操作员不会尝试 RHS 解析器 - 但我看不出这是怎么发生的。P_BOOL_VALUE 和 P_INT_VALUE 没有任何共同的起始字符,因此在尝试解析错误的数据类型时两者都应该立即失败。整数从不以“假”或“真”开头,布尔从不以数字开头。

我究竟做错了什么?

0 投票
0 回答
81 浏览

f# - fparsec 在解析时获取索引

学习 f# 使用 fparsec 解析一些分隔数据。我正在使用 sepBy 来获取结果列表并过滤掉空结果。我不想要空的项目,但我确实想知道这些项目的位置。有没有更好的方法来获取索引而不是 List.mapi,然后过滤掉空的?分隔数据内部将有其他分隔数据(代表子项)。

结果:

稍后我将需要支持更复杂的层次结构,并且我想避免再编写 5-6 个函数,如“cleanPipes”和“cleanCarrots”,然后再编写另外 5-6 个函数,如“zipPipes”和“zipCarrots”。