问题标签 [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 投票
2 回答
1093 浏览

.net - “该值不是函数,无法应用。” F#中的错误

我试图运行以下FParsec代码,直到由于某种原因它停止工作:

在此处输入图像描述

我得到的错误是

但是,如果我注释掉最后一行代码 ( test ns ".."),它不会产生错误。关于如何解决这个问题的任何想法?


文本形式的源代码如下:

0 投票
1 回答
383 浏览

f# - 使用 FParsec 解析方法参数

我正在尝试使用 FParsec 实现方法参数解析器。

我想知道 FParsec 本身是否有一些已经实现的功能可以帮助我实现这个目的?我问这个是因为 FParsec 在处理运算符优先级时提供了工具,所以这也可能有一些东西。


解析左大括号和右大括号非常简单。头疼在于处理以下三种可能发生的情况:

方法参数可以包括:

  • 没有争论,
  • 一个论点,
  • 几个参数(所有逗号分隔)。请记住,最后一个参数前面不能有逗号!

如果没有任何内置功能,即使用 <|> 运算符和流复制,我已经有一些关于如何自己实现这一点的线索,但我想远离那种低级的东西,如果可能的。

0 投票
2 回答
160 浏览

.net - FParsec 默认错误消息

假设我正在定义以下解析器:

解析时,会发生错误,正如人们所期望的那样:

我很好奇为什么它不能确定问题是他在期待一封信却找不到。我是否希望自己以某种方式将该信息添加到解析器中?

0 投票
2 回答
753 浏览

parsing - 提高 FParsec 解析器的可读性

我有一个用 C# 编写的手写 CSS 解析器,它变得难以管理,并试图在 FParsec 中实现它以使其更易于维护。这是一个解析用正则表达式制作的 css 选择器元素的片段:

我的第一次尝试得到了这个:

但我不是很喜欢它是如何形成的。我期待提出一些更容易理解的东西,但是解析 (tag?id|tag?classes|tag)pseudoClass 的部分?有几个 pipe2 和尝试真的很糟糕。

有没有在 FParsec 方面有更多经验的人来教我更好的方法来实现这一点?我正在考虑尝试 FSLex/Yacc 或 Boost.Spirit 而不是 FParsec 看看我是否可以用它们想出更好的代码

0 投票
0 回答
583 浏览

.net - 如何解析 CIMPLICITY 的 ctx 文件

我必须解析 CIMPLICITY 的 ctx 文件。Ctx 文件示例:

上面的文件代表 CIMPLICITY 的屏幕。问题是基于该文件构建 WPF 屏幕。首先,在我看来,我应该解析该文件,删除不需要的部分,然后构建接口。

我在 Internet 上搜索了基于 .Net 的解析器 - FParsec。问题是我从来没有用 F# 编码过,而且很难理解如何使用这个库。所以我不想做额外的工作。

主要问题:是否可以将该文件解析为使用 FParsec 表示屏幕结构的自定义对象。例如,这个对象可能有这样的定义:

可能是方法不对?什么是对的?

更新:

我也有用于 scree 语言的BNF 。样本:

0 投票
1 回答
242 浏览

f# - 如何为 .NET Compact Framework 构建 FParsec?

我正在编写一个基于 FParsec 的小型应用程序。

今天,我正在寻找机会为 Compact Framework 制作一个版本。显然,为 .NET CF 构建 FParsec 源代码并不是那么简单。FParsecCS 库有不安全的代码和一些对 CF 中不可用的类型的引用。即,System.Collections.Generic.HashSetSystem.Text.DecoderFallbackException,等等。

我想知道是否有任何方法可以构建它。显然,我试图不更改代码,因为当 FParsec 的其他版本发布时很难更新。

我真的不关心性能。如果有一个CharStream可以用来代替高性能的泛型,那就足够了。

谢谢您的帮助。

0 投票
1 回答
312 浏览

f# - 我应该使用 Workflow 还是 fsYacc?

我有一个非常简单的 DSL,需要在 .Net 平台上解析。我对解析器不是很有经验,我一直在查看使用 F#(fsLex、fsYacc、FParsec)的示例。我对 F# 不是很熟悉,但对 Workflow 和 LINQ 有一些经验。

鉴于 DSL 的简单性,我可以使用 LINQ 来实现词法分析器。工作流(我将使用 V4)对实现语法很有吸引力,因为我更熟悉它,鉴于它的图形性质,它更容易向其他人解释,并且它受到 Microsoft 的支持,并且可能会继续发展。

但是,如果我的 DSL 变得更加复杂,我可以将 WF 实现想象成一个嵌套的活动地狱,并且一个基于 LINQ 的词法分析器也会以同样的方式进行。那时学习 F# 并使用其中一种 F# 工具会更有意义。

我想知道其他人是否比较了 WF 和 F# 解析工具来实现一个简单的 DSL 解释器以及可能的结论。

0 投票
2 回答
1622 浏览

parsing - F# 中是否有任何已知的解析器组合库可以解析二进制(不是文本)文件?

我熟悉 fparsec 的一些基础知识,但它似乎面向文本文件或流。

是否有任何其他 F# 库可以有效地解析二进制文件?还是可以轻松修改 fparsec 以有效地处理二进制流?

0 投票
1 回答
804 浏览

f# - 如何将 FParsec 解析器转换为解析空格

我正在使用 FParsec 实现一个将注释视为空白的解析器。似乎它需要一个简单的解析器转换,但我还不知道如何实现它。

这是我试图进行类型检查的代码 -

错误出现在两个运算符的第二个参数上<|>(over whitespaceText)。错误是 -

看来我需要将 a 转换Parser<char list, 'a>Parser<string, 'a>. 或者,由于我只是跳过它们,我可以将它们都转换为Parser<unit, 'a>. 但是,我不知道如何编写该代码。它是一些简单的 lambda 表达式吗?

干杯!

0 投票
1 回答
1235 浏览

f# - 如何使用 FParsec 解析评论

我正在尝试使用 FParsec 解析来自 s-expression 语言的 lisp 样式的注释。在上一个线程中解析单行注释时我得到了一些帮助 - How to convert an FParsec parser to parse whitespace

虽然解决了这个问题,但我仍然需要解析多行注释。这是当前代码 -

不幸的是,multilineComment 解析永远不会成功。由于这是一个组合器,我无法设置断点或分析它为什么不起作用。

任何想法为什么它不起作用?