问题标签 [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.
parsing - 在解析期间对不同类型的术语进行分区
我有两个用于不同类型术语的解析器。
我有一个表示这些术语序列的数据类型。
如果我的输入是一系列混合术语,那么将s 与sc :: Parser C
分开并保留它们的顺序的好方法是什么?例如,给定这些定义:A
B
"abAbBBA"
将解析为序列aAA
和bbBB
. 我有一种需要使用的感觉StateT
,但不确定具体细节,只需要朝着正确的方向推进。
haskell - 不支持 Parsec.Expr 重复前缀/后缀运算符
的文档Parsec.Expr.buildExpressionParser
说:
相同优先级的前缀和后缀运算符只能出现一次(即,如果- 是前缀否定,则--2 是不允许的)。
确实,这让我很痛苦,因为我试图解析的语言允许任意重复其前缀和后缀运算符(想想像这样的 C 表达式**a[1][2]
)。
那么,为什么要Parsec
做出这个限制,我该如何解决呢?
我想我可以将我的前缀/后缀解析器向下移动到term
解析器中,因为它们具有最高优先级。
IE
被解析为
但是如果我想让它解析为
如果buildExpressionParser
做了我想要的,我可以简单地重新排列表中运算符的顺序。
注意请参阅此处以获得更好的解决方案
haskell - Parsec 的类型错误
我正在使用 Parsec 3.1.2 和 GHC 7.4.1 来尝试为有点毛茸茸的数据文件格式编写解析器。我认为这是一个非常微不足道的案例,但我遇到了类型错误。我正在尝试遵循 Real World Haskell 中的应用函子示例。
现在,最初我收到以下类型错误:
基于Trivial parsec example 产生类型错误我尝试添加NoMonomorphismRestriction
语言 pragma,但这没有帮助。
我承认,我发现 Parsec 的学习曲线相当陡峭,尽管我有一点 Haskell 经验。Real World Haskell 书中的示例基于 Parsec 2 并没有帮助。
haskell - 如何让 Parsec 让我调用`read` :: Int?
我有以下,类型检查:
现在,正如函数名所暗示的,我希望它给我一个 Int。但如果我这样做:
我收到这种类型的错误:
有没有一种更简单、更简洁的方法来解析可能有空格的整数?或者有办法解决这个问题?
最终,我希望这成为以下内容的一部分:
这是解析如下所示的行:
所以我最终可以调用一个需要这些值的 BetaPair 构造函数(一些作为 Int,一些作为其他类型,如 [Exposure] 和 Parallel)
(如果你好奇,这是一个文件格式的解析器,它代表蛋白质中的氢键 β 链对等。我无法控制文件格式!)
haskell - 秒差类型的问题
在为特定的计算生物学文件格式编写解析器时,我遇到了一些麻烦。
这是我的代码:
现在,如果我注释掉 betaLine 的定义,一切都会编译,并且我已经成功测试了单独的解析器 p_int、p_direction 和 p_exposure。
但是,当存在 betaLine 方程时,我会收到一个我不太理解的类型错误。我对应用程序 <*> 的理解是错误的吗?最终,我希望它返回 Int -> Int -> Int -> Int -> Direction -> ExposureList,然后我可以将其提供给 BetaPair 的构造函数。
类型错误是:
haskell - 行尾的 Parsec 问题
我有一个 Parsec 解析器,我主要以应用风格编写。在一种情况下(我唯一一次使用sepBy
)我的eol
解析器有问题。首先,几个定义:
注意:betaLine
完美运行(为简洁起见,我省略了p_int
等的定义:
这个其他解析器会出现问题,hmmMatchEmissions
:
现在,如果我<* eol
从解析器定义中删除,并\n
从行中删除,它确实有效:
那么,为什么在但不是eol
的情况下工作?betaLine
hmmMatchEmissions
我会注意到这是我唯一使用的地方sepBy
;这可能是一个线索吗?
更新:我做了以下事情,现在失败了:/
这是失败的:
我会注意到第0
10 列中的意外是0.124
令牌的第一个字符。
haskell - Parsec 超前处理整数
我正在使用 Parsec 解析器来处理有点复杂的数据文件格式(我无法控制这种格式)。
我已经取得了很大的进步,但目前我坚持以下几点。
我需要能够像这样解析一行:
语义上,4
是一个nodeNum,Floats
和*
是负对数概率(因此,*
表示概率为零的负对数)。和149
减号真的很垃圾,我可以丢弃,但我至少需要确保它们不会破坏解析器。
这是我到目前为止所拥有的:
这处理了我提到的“垃圾”。它可能更简单,但它本身就可以工作。
该nodeNum
行的开头由另一个有效的解析器处理,我不需要进入。
问题在于尝试p_logProb
从行中挑选出所有 s ,而不消耗 . 开头的数字emAnnotationSet
。
解析器p_logProb
看起来像这样:
最后,我尝试将logProb
条目与尾随emAnnotationSet
(以整数开头)分开,如下所示:
因此,p_logProb
只会在以数字开头、包含小数点、然后有更多数字的浮点数上成功(文件格式遵守此限制)。
我希望定义try
中的 thep_logProb
可以避免使用前导数字,如果它不解析小数和其余部分,但这似乎不起作用;Parsec 仍然抱怨它在以下整数的数字之后看到了一个意外的空格emAnnotationSet
:
第 196 列对应于减号之前的整数之后的空格,所以我很清楚问题在于p_logProb
解析器正在使用整数。我该如何解决这个问题,以便p_logProb
解析器正确使用前瞻,从而将输入留给emAnnotationSet
解析器?
haskell - Haskell parsec 解析为可能
只是一个我无法解决的简单问题。
我想将字符串解析为 String 或 Maybe Double,其中空字符串或“n/a”被解析为 Nothing。例如:
我在使用 v_nothing(以及引导和训练空白)时遇到问题。
谢谢。
编辑:
我为 v_nothing 尝试了各种各样的事情,但无济于事。