我已经阅读过 Haskell 中的解析组合器(Parsec)可以解析上下文有关语法。请问 Scala 中的解析组合器是否也是如此?如果是,那么“into”(又名“>>”)函数是用来做什么的? Scala 解析组合器与 Haskell 相比都有哪些优缺点?它们是否接受相同类别的语法?在这两种语...
使用 Control.Applicative 在 Parsec 中非常有用,但你需要始终隐藏 <|> 和类似的对象,因为它们与 Parsec 自身存在冲突: import Control.Applicative hiding ((<|>), many, optiona...
我正在使用Parsec解析表达式,并希望使用Parsec中的用户状态跟踪这些表达式中的变量。不幸的是,我并不真正了解如何实现。 给定以下代码:import Data.Set as Set inp = "$x = $y + $z" data Var = V String var = do ...
Parsec.Expr.buildExpressionParser 的文档说: 引用: 相同优先级的前缀和后缀运算符只能出现一次(即如果“-”是前缀否定,则不允许--2)。 结束引用 事实上,这已经困扰我了,因为我试图解析的语言允许任意重复其前缀和后缀运算符(类似于 C 表达式 `...
“indents”包是Haskell的Parsec库提供的一种解析缩进风格语言(如Haskell和Python)的方法。它重新定义了“Parser”类型,那么如何使用由Parsec的Text.Parsec.Token模块导出的标记解析器函数,这些函数属于普通的“Parser”类型? Par...
我正在使用Parsec编写我的第一个程序。 我想解析MySQL模式转储,并且希望用不区分大小写的方式来解析表示特定关键字的字符串。 这里是一些代码,展示了我正在使用的解析“CREATE”或“create”的方法。是否有更好的方法来做到这一点?最好不要使用buildExpressionParse...
我将编写一个Verilog(或VHDL)语言的解析器,并对解析出来的数据进行大量操作(一种转换)。我打算解析非常大的文件(完整的Verilog设计,有10K行之多),并最终支持大部分Verilog。我不介意手动输入,但是我不想在添加对某些规则的支持时重写任何代码的部分。 在Haskell中,...
我正在尝试让这个微不足道的parsec代码编译通过import Text.Parsec simple = letter 但是我一直收到这个错误信息。No instance for (Stream s0 m0 Char) arising from a use of `letter' Poss...
我最近使用Ply(它是一个Python重写的Yacc)编写了一个解析器。当我快完成解析器时,我发现需要在解析期间进行一些查找来通知词法分析器,以便正确解析该语言中的字符串。 由于我可以从语法规则控制词法分析器的状态,因此我认为我将使用解析器模块中的查找表解决我的用例,但这可能会变得难以维护/...