在秒差距中,有没有办法防止词素消耗换行符?

2024-01-29

中的所有解析器Text.Parsec.Token礼貌地使用lexeme吃掉令牌后的空白。对我来说不幸的是,空格包含新行,我想将其用作表达式终止符。有没有办法说服lexeme留下一条新线?


不它不是。这是相关代码。

From 文本.Parsec.Token http://hackage.haskell.org/packages/archive/parsec/3.0.0/doc/html/src/Text-Parsec-Token.html#GenTokenParser:

lexeme p
    = do{ x <- p; whiteSpace; return x  }


--whiteSpace
whiteSpace
    | noLine && noMulti  = skipMany (simpleSpace <?> "")
    | noLine             = skipMany (simpleSpace <|> multiLineComment <?> "")
    | noMulti            = skipMany (simpleSpace <|> oneLineComment <?> "")
    | otherwise          = skipMany (simpleSpace <|> oneLineComment <|> multiLineComment <?> "")
    where
      noLine  = null (commentLine languageDef)
      noMulti = null (commentStart languageDef)

人们会注意到在 where 子句中whitespace唯一的选择就是处理评论。这lexeme功能用途whitespace并且它在其余部分中被广泛使用parsec.token.


2015 年 9 月 28 日更新

对我来说最终的解决方案是使用适当的词法分析器(alex https://www.haskell.org/alex/)。 Parsec 作为一个解析库做得非常好,它的设计值得称赞,它可以被用来进行词法分析,但对于除小而简单的项目之外的所有项目,它很快就会变得笨拙。我现在使用 alex 创建一组线性标记,然后 Parsec 将它们转换为 AST。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在秒差距中,有没有办法防止词素消耗换行符? 的相关文章

  • 移动列表中特定元素的简单函数

    我是 Haskell 的新手 我正在尝试弄清楚如何创建一个函数 shift Eq a gt a gt a gt Int gt a shift x h t z 输入 一个通用列表和一个相同类型的元素 x 前提条件 元素x存在于列表中 Outp
  • 在 Haskell 中提升 State monad 中的值

    我正在 Haskell 中编写一个数独生成器 求解器作为学习练习 My solve函数接受一个UArray但返回一个State Int UArray 这样它也可以返回解决问题时发现的最大难度级别 到目前为止 这是我的功能 仍处于实验性的早期
  • 使用 cabal new-install 重新安装相同版本的软件包

    我正在开发 Haskell 包 我还没有上传到Hackage 版本号是0 1 0 0 我正在使用新风格的 Cabal 命令 为了在我处理包的同时测试它 使库可用于测试项目 我运行cabal new install lib构建包后 然而 我注
  • GHC 可以为 monad 转换器派生 Functor 和 Applicative 实例吗?

    我正在尝试实施MaybeT本着mtl图书馆 使用这个非编译解决方案 LANGUAGE FlexibleInstances MultiParamTypeClasses UndecidableInstances import Control M
  • 显示未定义的实例

    可以采取任何措施来为未定义的值定义 Show 实例吗 也许存在一些 GHC 扩展 我想要这样的东西 gt print 1 undefined 1 undefined 根据Haskell 2010 报告 第 9 章 http www hask
  • 用parsec解析递归数据

    import Data Attoparsec Text Lazy import Data Text Lazy Internal Text import Data Text Lazy pack data List a Nil Cons a L
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

    在 Emacs 中使用 sml mode 我已经能够使用以下命令将缓冲区内容直接发送到较差的 SML 进程C c C b 现在我只想用 Haskell 做同样的事情 Haskell 模式似乎不支持这一点 所以我想知道 使用 Emacs 和
  • 生成所有可能的树

    给定以下数据类型定义 data FormTree Empty Node FormTree FormTree deriving Show 我想编写一个函数 它生成一个无限列表 其中包含按长度排序的所有可能的树 例如节点数量 下面的代码几乎满足
  • 整数转浮点数

    这段代码的工作原理 posToXY Float gt Float gt Integer posToXY a b do let y a b round y 但这不起作用 posToXY Integer gt Integer gt Intege
  • 使用 nix 在 Mac OS X 上由于“架构 x86_64 的未定义符号”而导致“堆栈构建”失败

    首先是错误消息 stack build Linking Users yuzhao stack setup exe cache x86 64 osx tmp Cabal simple mPHDZzAJ 2 2 0 1 ghc 8 4 4 cl
  • 如何让 Show 显示函数名称?

    作为一个让我熟悉 Haskell 的简单练习 在 Youtube 上闲逛并偶然进入美国倒计时游戏节目之后 我想为数字游戏制作一个求解器 你得到 6 个数字 需要将它们与 为了得到给定的结果 到目前为止我所得到的是非常脑死亡的 let ope
  • 这个记忆的斐波那契函数是如何工作的?

    在我正在做的函数式编程课程的当前练习作业中 我们必须制作给定函数的记忆版本 为了解释记忆化 给出以下示例 fiblist fibm x x lt 0 fibm 0 0 fibm 1 1 fibm n fiblist n 1 fiblist
  • 为什么 Haskell 的默认字符串实现是一个字符链接列表?

    Haskell 默认值的事实String众所周知 实现在速度和内存方面都效率不高 据我所知 lists一般来说 在 Haskell 中实现为单链表 并且适用于大多数小型 简单数据类型 例如Int 这似乎不是一个好主意 但是对于String这
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 持久 selectList 导致错误“无法将类型‘BaseBackend backend0’与‘SqlBackend’匹配”

    我遇到以下编译错误 Couldn t match type BaseBackend backend0 with SqlBackend arising from a use of runSqlite The type variable bac
  • 在依赖类型的函数式编程语言中,扁平化列表是否更容易?

    在 haskell 中寻找一个可以展平任意深度嵌套列表的函数时 即应用的函数concat递归并在最后一次迭代时停止 使用非嵌套列表 我注意到这需要有一个更灵活的类型系统 因为随着列表深度的变化 输入类型也会变化 确实 有几个 stackov
  • 将 num 的签名键入 double?

    我才刚刚开始为你学习 Haskell 以获得伟大的好处 并且我在类型类方面遇到了一些麻烦 我想创建一个接受任何数字类型并强制其为双精度的函数 我的第一个想法是定义 numToDouble Num gt Double 但我认为这不起作用 因为
  • 以下两个 lambda 函数的空间复杂度

    我正在阅读以下内容 https en wikibooks org wiki Haskell Graph reduction https en wikibooks org wiki Haskell Graph reduction 其内容如下
  • 使用 FoldLine 解析多个块

    对于这个简化的问题 我试图解析一个如下所示的输入 foo bar baz quux woo hoo xyzzy glulx into foo bar baz quux woo hoo xyzzy glulx 我尝试过的代码如下 import
  • 如何在 Haskell 中制作打勾游戏的图案?

    实现有 2 个参数的函数 ticktick 第一个参数是自然数元组 定义游戏场地的行数和列数 第二个列表包含由玩家 x 和玩家 o 轮流玩的坐标给出的井字游戏比赛的记录 打印游戏的实际状态 其中游戏区域将由字符 和 界定 空方块 以及字符

随机推荐

  • 如何在 JavaScript 中进行排列?

    我想用javascript进行排列 这是我的代码 const arr 1 2 3 4 5 for let i1 0 i1 lt arr length i1 for let i2 i1 1 i2 lt arr length i2 consol
  • HTML5默认字体颜色是什么?

    根据经验 我知道如果我不使用 CSS 更改字体颜色 它总是黑色的 000000 但我想知道 当默认字体颜色不是黑色时是否有任何边缘情况 所以我做了一些谷歌搜索 但我只找到了有关如何更改字体颜色的读物 我错过了什么 有谁知道我可以在哪里进一步
  • 如何使用 iOS 4.1 SDK 中新的 UIKeyboardTypeDecimalPad 功能

    现在我正在学习为 iPhone 编程 并且正在使用一个具有标准数字键盘的示例应用程序 我也需要输入小数点 但数字键盘没有 SDK 4 1支持此功能 但我无法将键盘类型设置为UIKeyboardTypeDecimalPad 至少我在Inter
  • Mac VSCode 调试器总是显示有关“;”的错误和 ':'

    我正在尝试在我的 Mac 上设置 vscode 环境 我按照网站上的流程操作https code visualstudio com docs cpp config clang mac https code visualstudio com
  • 如何在 ruby​​ 中运行后台线程?

    我是 ruby 新手 认为重建我用 C 编写的简单聊天程序是个好主意 我正在使用 Ruby 2 0 0 MRI Matz 的 Ruby 实现 问题是我想在服务器运行时为简单的服务器命令提供 I O 这是从样本中获取的服务器 我添加了使用 g
  • 处理 Paypal 和 Local Datasase 之间的交易

    处理应用程序和贝宝之间交易的最佳实践是什么 考虑 我是 Alice 我想汇款给 Bob 在我的数据库中 我看到鲍勃有 200 美元 我想向他发送 150 美元 交易发送后 我想更新 Bob 的帐户 使其包含 50 美元 现在根据 PayPa
  • 在 pandas 中, inplace = True 是否被认为是有害的?

    之前已经讨论过这个问题 但答案相互矛盾 到位就好 https stackoverflow com a 34326313 8425408 到位就不好了 https stackoverflow com a 22533110 8425408 我想
  • 是否可以在 Bottle Web 框架中运行任务调度程序

    有谁有关于如何在 Bottle 中集成任务调度程序的示例吗 像 APScheduler 或 sched 这样的东西 我建议对其进行线程化 使网络服务器不受计划任务的影响 这些任务要么在队列中 要么写入代码本身
  • 具有自定义身份验证过滤器的 WebSecurityConfigurerAdapter - 依赖性问题

    我有 SPNEGO 的 Spring 安全配置 它正在 通过黑客 工作 它看起来如下 Configuration EnableWebSecurity public class SpnegoConfig extends WebSecurity
  • Java - “@Override”的用途是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 java 中的 Override 有什么用 https stackoverflow com questions 2489974 whats override there for in java 到目前
  • 如何在 SQL 中的两个 varbinary 字段之间执行 AND BIT OPERATOR

    有人可以针对这种方法提出一个好的解决方案吗 我有 2 个长度为 1024 位的二进制字符串 1010101 现在我想对两者进行位运算 AND 来得到一个值 无论它是否大于0 目前我正在将字符串转换为 hex 256 和 varbinary
  • 为什么STL的命名约定使用这么多前导下划线?

    例如 template
  • 如何使用子表达式

    你好 stackoverflow 社区 我有一个序言代码 它为真值表创建子表达式 然后给它们值 true false 它对于很多表达式都工作得很好 但是使用这个语句会发生这种情况 1 phrase subexprs bicond and i
  • mySQL 按成员名称分组

    我正在使用此查询来获取向用户发送消息的人员或向其发送消息的用户的列表 SELECT messages FROM SELECT MAX lastseen AS lastseen FROM messages WHERE user IN from
  • 如何使用 AutoHotkey 插入格式化文本?

    我创建了一个脚本 可以在任何 Windows 应用程序中插入今天的日期 当我将其粘贴到目标应用程序时 我想控制格式 例如字体和 或颜色 我似乎无法在文档或任何帮助论坛中找到它 格式化文本可以使用 AutoHotkey 1 1 又名 Auto
  • 使用 Flask 处理 Twitter Bootstrap 事件

    我在网络应用程序上有一组 Twitter Bootstrap 按钮 我需要将选择传递给 Flask 并且我不想使用提交按钮 div class btn group view opt btn group div
  • 在 PHP 页面之间传递信息

    如何在 PHP 页面之间传递信息 例如 我有一个 PHP 脚本来处理来自表单的登录输入 然后有一个单独的 PHP 脚本来处理用户的进一步输入 但是 我希望第二个 PHP 文件接收来自登录表单的输入 本质上 我不希望相同的脚本在登录时运行两次
  • ElasticSearch - RestHighLevelClient java.io.IOException:现有连接被远程主机强制关闭

    上午取100K使用单个查询添加索引中的文档 为此我正在使用ScrollSearchAPI 之后 我将逐一迭代每个文档 并向其中添加一个字段并为其创建一个新索引 我正在使用RestHighLevelClient用于 Java 代码和 Elas
  • 在 Python 中打印表格

    我有一个任务要在 Python 中创建一个 10 x 10 表 并且我在打印函数中使用结尾 t 来防止它创建新行 但是 我需要它在 10 个字符之后开始一个新行 我怎样才能让它做到这一点 这是我的代码 product 0 for x in
  • 在秒差距中,有没有办法防止词素消耗换行符?

    中的所有解析器Text Parsec Token礼貌地使用lexeme吃掉令牌后的空白 对我来说不幸的是 空格包含新行 我想将其用作表达式终止符 有没有办法说服lexeme留下一条新线 不它不是 这是相关代码 From 文本 Parsec