parsec相关内容
我在解决如何使用indentsHaskell程序包提供的Text.Parsec.Indent模块中的任何函数时遇到问题,该程序包是Parsec的一种加载项。 所有这些函数都有什么作用?如何使用它们? 我可以理解withBlock的简短Haddock描述,我找到了如何使用withBlock、runIndent和IndentParsertypehere、here和here的示例。我还可以理
..
我决定查看 FParsec,并尝试为 λ 表达式编写解析器.事实证明,渴望使递归解析变得困难.我该如何解决这个问题? 代码: 打开 FParsec输入λExpr =|字符变量|λExpr * λExpr 的应用|char * λExpr 的 Lambda让 rec FV = 函数|变量 v ->Set.singleton v|应用 (f, x) ->FV f + FV x|Lambda (
..
大约 6 年前,我在 OCaml 中对自己的解析器组合器进行了基准测试,发现它们比当时提供的解析器生成器慢约 5 倍.我最近重新审视了这个主题,并对 Haskell 的 Parsec 与一个简单的手动优先级爬升解析器进行了基准测试 用 F# 编写,并惊讶地发现 F# 比 Haskell 快 25 倍. 这是我用来从文件中读取大型数学表达式、解析和评估它的 Haskell 代码: impor
..
文本文本解析文本.Parsec.ByteStringText.Parsec.ByteString.Lazy文本.Parsec.Char文本.Parsec.Combinator文本解析错误文本解析表达式文本.Parsec.Language文本.Parsec.Perm文本.Parsec.Pos文本.Parsec.Prim文本.Parsec.String文本.Parsec.Token解析器组合器Text
..
我是 Haskell 和 Parsec 的新手.看完第16章使用现实世界Haskell的Parsec后,我的脑海中出现了一个问题:为什么以及何时 Parsec 比 Yacc/Bison/Antlr 等其他解析器生成器更好? 我的理解是 Parsec 创建了一个很好的编写解析器的 DSL,而 Haskell 使它非常容易和富有表现力.但是解析是一种标准/流行的技术,值得拥有自己的语言,输出到多
..
我正在使用 parsec 编写源到源转换,所以我有一个LanguageDef 用于我的语言,我使用 Text.Parsec.Token.makeTokenParser 为它构建了一个 TokenParser: myLanguage = LanguageDef { ...评论开始 = "/*", commentEnd = "*/"...}-- 定义 'stringLiteral'、'identif
..
考虑一种简单的语言,该语言是用空格分隔的命令的列表.每个命令均以单个字母作为命令名称,并使用一系列以空格分隔的数字作为其参数.例如 a 1 2 3 b 4 5 6 d 7 e f 表示以下命令: a 1 2 3 b 4 5 6 d 7 e f 问题在于它不断通过 sepBy 抓取物品,并到达另一个数字,但到达"b"时失败. 但是,通过下面的代码传递时会产生以下错误: 左
..
我正在尝试解析一些逗号分隔的字符串,该字符串可能包含也可能不包含具有图像尺寸的字符串.例如"hello world,300x300,再见的世界" . 我编写了以下小程序: import Text.Parsec将合格的Text.Parsec.Text导入为PSparseTestString ::文本->[也许(Int,Int)]parseTestString s = case解析dimen
..
传统上,算术运算符被认为是二进制运算符(左或右关联),因此大多数工具仅处理二进制运算符. 有没有一种简便的方法可以使用Parsec解析算术运算符,Parsec可以具有任意数量的参数? 例如,以下表达式应解析到树中 (a + b)+ c + d * e + f
..
给出格式为 A,B,C 的输入,其中顺序不固定(例如,也可以使用 C,B,A ),我该如何解析字符串放入元组(a,b,c)中,以便再次对结果进行排序? 更大的例子: 输入A: A 1B 2C 3 输入B: C 3B 2A 1 解析器: a ="A" *>小数b ="B" *>小数c ="C" *>小数 如何编写一个解析器,为输入A和输入B提供(1,2,3).
..
我对Text.Parsec的使用有点生锈.如果我只想返回匹配的字符串,这是惯用的吗? category :: Stream s m Char => ParsecT s u m [Char] category = concat (many1 $ (:) char '/' (many1 $ noneOf "/\n"))
..
我希望找到一个函数 integer :: Stream s m Char => ParsecT s u m Integer 或者甚至 natural :: Stream s m Char => ParsecT s u m Integer 在标准库中,但我没有找到. 将纯自然数直接解析为Integer的标准方法是什么? 解决方案 这里我经常要做的就是使用表达式
..
我具有许多字段的数据类型,如果不是由JSON配置文件手动指定,则应随机设置.我正在使用Aeson解析配置文件.最好的方法是什么? 当前,我正在将值设置为等于某个不可能的值,然后再检查该值以进行编辑. data Example = Example { a :: Int, b :: Int } default = Example 1 2 instance FromJSON Example
..
我需要向parsec中的给定位置提供失败消息. 在给出意外错误消息之前,我尝试通过设置位置来解决问题,但这种方法无效: runParser ( do pos0
..
我有以下内容,可以进行类型检查: p_int = liftA read (many (char ' ') *> many1 digit many1 digit
..
我正在尝试使用FParsec解析箭头类型. 也就是说,这个: Int -> Int -> Int -> Float -> Char 例如. 我尝试使用此代码,但它仅适用于一种类型的箭头(Int -> Int),而不再适用.我还想避免使用括号,因为我已经有一个使用它们的元组类型,并且我也不希望它在语法方面过于繁琐. let ws = pspaces >>. many pspac
..
我正在使用比尔·卡萨林(Bill Casarin)上的帖子如何使用fparsec解析定界文件,我在简化逻辑以了解代码的工作原理.我正在将多行定界文档解析为Cell列表列表结构(目前),其中Cell是字符串或浮点数.我是这个方面的新手. 我在解析浮点数时遇到问题-在典型情况下(由制表符分隔的单元格,包含数字)可以正常工作.但是,当一个单元格碰巧是一个以数字开头的字符串时,它就会崩溃. 我
..
我正在尝试使用 parsec 编写以下解析器: manyLength :: forall s u m a. Monad m => ParsecT s u m a -> ParsecT s u m Int manyLength p = go 0 where go :: Int -> ParsecT s u m Int go !i = (p *> go (i
..
我想使用Parsec的makeTokenParser来构建解析器,但是我想使用自己的whiteSpace定义.执行以下操作将whiteSpace替换为我的定义,但是所有lexeme解析器仍使用旧的定义(例如P.identifier lexer将使用旧的空白). ... lexer :: P.TokenParser () lexer = l { P.whiteSpace = myWh
..
我最近使用Ply在Python中编写了一个解析器(这是yacc的python重新实现).当我几乎完成解析器的工作后,我发现我需要解析的语法要求我在解析过程中进行一些查找以告知词法分析器.如果不进行查询以通知词法分析器,就无法正确解析该语言中的字符串. 鉴于我可以从语法规则中控制词法分析器的状态,我想我将使用解析器模块中的查找表来解决用例,但是维护/测试可能变得太困难了.因此,我想了解其他一些
..