问题标签 [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.
f# - 如何将 FParsec 结果值提取到 FSI 中的变量
我正在使用 FParsec 并尝试将结果值绑定到 FSI 中的变量。我尝试了以下方法:
它似乎绑定然后忘记它,但我认为我错过了一些东西,因为以下解构有效:
以下函数似乎能够使用 match 语句提取值(尽管我需要根据解析器更改失败类型):
我有什么误解?
parsing - 在已标记化的 UInt16 流上使用 FParsec
我需要解析一个已经标记化的 type 流UInt16 seq
。
我怎样才能用 FParsec 做到这一点?我可以在关于s
的参考著作中找到所有顶级函数。charstream
目前我将UInt16
s转换为 s ,char
这看起来很愚蠢。
parsing - Fparsec 递归语法抛出 StackOverflowException
我有这个代码
当它评估时,它会抛出 StackoverflowExcpetion。所以问题是我如何在没有无限递归的情况下编写它?
parsing - FParsec 解析带括号的表达式
我正在编写我的第一个解析器。它在 F# 中,我正在使用 FParsec。
我的解析器解析诸如true and false
, (true and false or true)
,等之类的东西true
,(((true and false or true)))
这是正确的。
但是当它像(true and false) or true
. 当文本中间有括号时,它会失败。
我该如何解决?
示例代码:
parsing - FParsec 只解析括号之间的 expr
我正在编写一个解析器(用于学习 pourpuses)。
我希望它解析像
和
没有问题......但我的解析器不“理解”前者。它看到40
并认为“嗯,它是一个Literal Numeric 40
”。
当我放括号时,我的解析器工作得很好。
我很难理解为什么。
解析器:
用法:
parsing - 使 OperatorPrecedenceParser 解析可选(opt)表达式
我正在实现一个解析器,它为我的项目实现特定领域的特定语言。
我遇到困难的一个方面是制作一个表达式(使用 FParsec 的 OperatorPrecedenceParser 实现),以便整个表达式是可选的。
我以与网络上的许多示例大致相同的方式实现了我的解析器 OPP。我还尝试改变行尾注释消耗空格的位置。我的尝试似乎都不适用于机器人案例(表达式和行尾注释都是可选的)
具体来说(如下面的示例中实现的),我试图让以下内容成功解析。
其中表达式是可选的,并且表达式后面有一个可选的注释。“KeyValue:”对于这个例子是硬编码的,但在我拥有的主解析器代码中,它是一个标识符。
注意以下示例。我已经实现了一个最小的表达式,它解析一个简单的中缀加法 2 个浮点数。完整的解析器实现了更多。
NB2。表达式必须在 : 和表达式之间至少有 1 个空格。# 注释字符根本不会出现在表达式中。
如何使表达式“可选”。请参阅下面的 eKeyValue FParsec 解析器类型。
下面的示例包含 6 个示例案例。所有案例都应该有效。我尝试将 wsBeforeEOL 添加到条款的末尾,使表达式可选(opt),但似乎没有任何效果。看起来 OPP 总是消耗,并且从不失败。
以下示例程序的输出如下所示:
示例程序为(以上测试用例在Main()函数中:
f# - FParsec 解析无序子句
我想解析一些语法,如下所示
子句的顺序GROUPBY TO USING
可以变化,但每个子句最多出现一次。
在 FParsec 中是否有一种方便或内置的方法来解析它?我阅读了一些提到 Haskell Parsec permute 的问题和答案。FParsec 中似乎没有置换。如果这是要走的路,我将如何在 FParsec 中构建置换?
parsing - 如何解析 FParsec 中的同构列表?
我在尝试解析 FParsec 中的类似 json 的同类数组时遇到问题。我已将问题分解为一个重现它的简短示例。
当我使用该test
功能进行尝试时,我得到以下结果:
如果我在使用运算符时交换了顺序P_INT_VALUE
,则解析成功但失败并出现类似错误。所以基本上,我首先使用的解析器就是它试图使用的。P_BOOL_VALUE
<|>
[true,false]
[1,2,3]
我知道<|>
如果 LHS 改变用户状态,操作员不会尝试 RHS 解析器 - 但我看不出这是怎么发生的。P_BOOL_VALUE 和 P_INT_VALUE 没有任何共同的起始字符,因此在尝试解析错误的数据类型时两者都应该立即失败。整数从不以“假”或“真”开头,布尔从不以数字开头。
我究竟做错了什么?
f# - fparsec 在解析时获取索引
学习 f# 使用 fparsec 解析一些分隔数据。我正在使用 sepBy 来获取结果列表并过滤掉空结果。我不想要空的项目,但我确实想知道这些项目的位置。有没有更好的方法来获取索引而不是 List.mapi,然后过滤掉空的?分隔数据内部将有其他分隔数据(代表子项)。
结果:
稍后我将需要支持更复杂的层次结构,并且我想避免再编写 5-6 个函数,如“cleanPipes”和“cleanCarrots”,然后再编写另外 5-6 个函数,如“zipPipes”和“zipCarrots”。