如何使用 FParsec 解析注释

2023-11-23

我正在尝试使用 FParsec 从 s 表达式语言解析 lisp 风格的注释。我在上一个线程中解析单行注释时得到了一些帮助 -如何转换 FParsec 解析器来解析空格

虽然这个问题已经解决,但我仍然需要解析多行注释。这是当前的代码 -

/// Read whitespace character as a string.
let spaceAsStr = anyOf whitespaceChars |>> fun chr -> string chr

/// Read a line comment.
let lineComment = pchar lineCommentChar >>. restOfLine true

/// Read a multiline comment.
/// TODO: make multiline comments nest.
let multilineComment =
    between
        (pstring openMultilineCommentStr)
        (pstring closeMultilineCommentStr)
        (charsTillString closeMultilineCommentStr true System.Int32.MaxValue)

/// Read whitespace text.
let whitespace =
    lineComment <|>
    multilineComment <|>
    spaceAsStr

/// Skip any white space characters.
let skipWhitespace = skipMany whitespace

/// Skip at least one white space character.
let skipWhitespace1 = skipMany1 whitespace

不幸的是, multilineComment 解析永远不会成功。由于这是一个组合器,我无法设置断点或分析它为什么不起作用。

有什么想法为什么它不起作用吗?


尝试更改 bool 参数closeMultilineCommentStr为假

(charsTillString closeMultilineCommentStr false System.Int32.MaxValue)

否则会跳过closeMultilineCommentStr string.

使其与嵌套注释一起使用

let rec multilineComment o=
    let ign x = charsTillString x false System.Int32.MaxValue
    between
        (pstring openMultilineCommentStr)
        (pstring closeMultilineCommentStr)
        (attempt (ign openMultilineCommentStr >>. multilineComment >>. ign closeMultilineCommentStr) <|> 
        ign closeMultilineCommentStr) <|o
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 FParsec 解析注释 的相关文章

  • F# 交互,API 对 dll 引用的限制

    您如何解决类似这样的错误消息 Binding session to C Program Files x86 NLog NET Framework 4 0 NLog dll error FS0193 API restriction The a
  • System.Version 未在 F# 中实现 System.IComparable

    我想对一个序列进行排序VersionF 中的对象 let maxVersion versions gt Seq max fun version gt version 编译器产生以下错误消息 类型 seq gt a 不支持 比较 约束 例如
  • 如何将两个函数调用合并为一个?

    我想合并以下几行 let result1 add numbers let result2 add numbers n 变成这样的东西 let resultX add numbers gt add numbers n 我可以编写这样的函数吗
  • 作为参数的函数的类型推断

    我想编写一个函数 它接受几个元组作为参数 并用元素选择它们并传递给另一个函数 其中 i 作为另一个参数给出 我已经尝试过这样的事情 let function tup1 A A tup2 B B i otherFunction i tup1
  • 将 OCaml 转换为 F#:将 OCaml open_box 和 close_box 转换为 F#

    我正在将几个基于 OCaml 的模块转换为 F 并遇到了 OCaml 打印格式化函数open box 和 close box http caml inria fr pub docs manual ocaml libref Format ht
  • 在 F# 列表中键入扩展名

    假设我有一个类型 let MyType some info 但是 它通常用于列表 MyType list 所以我可以定义 let MyTypeList MyType list 有没有办法在 MyTypeList 上定义类型增强 我的实际情况
  • F# 类型函数和 [] 属性

    这两个 F 类型函数有什么区别 let defaultInstance1 lt a when a new unit gt a gt new a
  • Silverlight 如何确定程序集是“Silverlight”?

    我正在尝试从 F 编译代码以在 Silverlight 中使用 我编译 noframework cliroot C program Files Microsoft Silverlight 2 0 31005 0 standalone 这会生
  • 平台调用 F# 回调函数

    我在 Raspberry Pi 2 ARM 7 和单声道 上使用 F 我目前正在尝试使用用 C 编写的 WiringPi 库 我已经成功地使用 P Invoke 来使用一些函数 现在我尝试使用中断 参见http wiringpi com r
  • 如何从复合泛型类型中检索值?

    如何从泛型中检索值 具体来说 我正在尝试以下操作 Test let result Validate goodInput How to access record let request getRequest result 这是代码 type
  • 不可变数据结构性能

    我不明白作为一个集合的东西怎么可能是不可变的并且仍然具有可接受的性能 根据我在 F Sets 中读到的内容 内部使用红黑树作为其实现 如果每次我们想要向红黑树添加新内容时 我们基本上都必须重新创建它 那么它如何才能具有良好的性能呢 我在这里
  • 在 F# 中的 Choice 之上构建 Either(或 Result)

    我根据 Scott Wlaschin 中的信息构建了一个成功 失败的 monadblog http fsharpforfunandprofit com posts computation expressions wrapper types
  • 如何在 x 轴上显示每个元素的标签?

    我有包含文件名和编号的元组序列 我想绘制柱形图 其中 X 轴上有文件名 我的问题是现在 X 轴下仅显示 3 个标签 文件名 这可能是因为屏幕无法容纳更多内容 还是X轴间隔错误 如何让图表显示所有文件名 也许有办法将这些标签逆时针旋转 90
  • 绘图 Deedle 框架

    我有以下代码 let mychart frame GetAllSeries gt Seq iter fun key value gt Chart Line value Name key gt Chart Combine where fram
  • 如何搭建Windows Phone开发环境并使用F#开发应用程序?

    我已经下载了Windows Phone开发工具 但我不知道如何使用F 来开发应用程序 目前是C 将 F 和 Windows Phone 模板安装到 Visual Studio 中可以让生活变得更轻松 如果您打开 Visual Studio
  • 是 F# 映射上的迭代还是集合中序遍历?

    AFAIK F Map 和 set 被实现为红黑树 所以我猜这些的迭代将是有序遍历 我做了一些测试 迭代结果总是排序的 但我想确定一下 是按顺序遍历吗 MSDN 上的文档非常适合解决这个问题 例如 返回值Set toSeq http msd
  • 如何在 F# 中将对象转换为泛型类型列表

    在下面的代码片段中 我的目的是将 System Object 可能是 FSharpList 转换为它所持有的任何泛型类型的列表 match o with list lt gt gt addChildList o gt list lt gt
  • 在 IEnumerable 上使用 Seq 函数 [重复]

    这个问题在这里已经有答案了 我正在尝试在 IEnumerable 上应用 Seq 函数 更具体地说 它是System Windows Forms HtmlElementCollection它实现了ICollection and IEnume
  • `ImmutableSortedSet` 和 fsharp `Set` 有什么区别?

    BCL引入了一组Immutable Collections http blogs msdn com b bclteam archive 2012 12 18 preview of immutable collections released
  • 管道序列中的异常处理

    我正在开发一个基本的 2D CAD 引擎 管道操作符显着改进了我的代码 基本上 有几个函数从空间中的点 x y 开始 并在多次移动操作后计算最终位置 let finalPosition startingPosition gt moveByL

随机推荐

  • 自动完成出现在模态弹出窗口后面

    我正在使用简单的 jquery 弹出窗口和自动完成jQuery 自动完成 自动完成的代码是这样的 tags autocomplete source NameArray 其中标签是文本框 ID NameArray 是字符串数组 但是模态弹出窗
  • 保留页面更改历史记录。有点像SO对修订所做的那样

    我有一个 CMS 系统 它跨表存储数据 如下所示 Entries Table id title text index1 index2 Entries META Table id entry id value param Files Tabl
  • 理解 std::fmod 和 std::remainder

    有人可以解释一下它的功能吗标准 fmod and std 余数工作 在这种情况下std fmod 有人可以解释一下步骤来说明如何 std fmod 5 1 3 0 2 1 同样的事情也适用于std remainder这可能会产生负面结果 s
  • PHPMyAdmin 中导入文件大小限制

    我已经更改了我知道的所有 php ini 参数 upload max filesize post max size 为什么我仍然看到 2MB 我在 Windows 7 主机上的 Ubuntu VirtualBox 上使用 Zend Serv
  • 如何将docker镜像推送到私有仓库

    我有一个标记为的 docker 镜像me my image 我在 dockerhub 上有一个名为me private 当我推我的me my image 我最终总是访问公共仓库 将我的图像专门推送到我的私人存储库的确切语法是什么 您需要首先
  • UMFPACK 和 BOOST 的 uBLAS 稀疏矩阵

    我在数字代码中使用 Boost 的 uBLAS 并有一个 重型 求解器 http www crystalclearsoftware com cgi bin boost wiki wiki pl LU Matrix Inversion 该代码
  • 多映射与多值映射

    在一个地方 我必须使用一个映射 其中许多值映射到一个键 所以我想知道使用之间是否有任何显着的性能区别键 列表的 HashMap and key value 的 MultiMap在Java中 你可以尝试一下 但我怀疑有很大的不同 因为它的作用
  • 通过存储过程从 SQL 导出二进制文件数据(图像)

    我正在尝试导出相当大量的图像文件 这些图像文件作为二进制数据内部存储在 SQL 数据库中 作为在 SQL 中编写存储过程的新手 我遇到了一些关于如何归档存储过程的非常有用的指南 但我似乎遗漏了一些东西 我正在本地运行 SQL Server
  • PostgreSQL 的 CLUSTER 与 SQL Server 中的聚集索引有何不同?

    很多帖子都喜欢这个 stackoverflow 链接声称 PostgreSQL 中没有聚集索引的概念 然而 PostgreSQL 文档包含类似的东西 有些人声称它类似于 SQL Server 中的聚集索引 您知道这两者之间的确切区别是什么
  • Backbone js 集合的集合问题

    当我尝试使用主干 js 创建集合的集合时 我遇到了问题 这是代码 型号和系列 var Track Backbone Model extend defaults title var TrackCollection Backbone Colle
  • 设置回调函数,该函数是类的非静态成员函数

    typedef void CALLBACK class Filter public void callback cout lt lt callback lt lt endl void SetCallback CALLBACK pCallBa
  • 如何在spark上将json字符串转换为dataframe

    我想将下面的字符串变量转换为 Spark 上的数据帧 val jsonStr metadata key 84896 value 54 我知道如何从 json 文件创建数据框 sqlContext read json file json 但我
  • Docker Desktop无法切换到Windows Container

    I have installed latest Docker Desktop Currently unable to switch to Windows container The option is blocked from task b
  • Docker1.12 Worker 无法加入集群(Swarm:待定)

    经理版Docker version 1 12 0 rc5 build a3f2063 工人版Docker version 1 12 0 rc5 build a3f2063 创建 Swarm 管理器 docker swarm init adv
  • 异步方法不等待函数

    我遇到了这个错误 尽管在 MDN 和这里进行了大量研究 但还没有解决它 我正在尝试使用异步和等待 但 JavaScript 不会等待 等待 函数结束 这里是 methods async search terms done console l
  • 如何使用 Visual Studio 加载项打开 TFS 变更集详细信息对话框视图?

    我在 TFS 中有一个特定的工件 例如变更集 123 它具有 URI vstfs VersionControl Changeset 123 我意识到链接 http tfs 8080 tfs web UI Pages Scc ViewChan
  • 如何跨域postMessage?

    的文档发布消息意味着跨域消息传递是可能的 然而 When the popup has fully loaded if not blocked by a popup blocker 这不是一个非常清楚的注释how真正做到这一点 想象一下两个网
  • 每个会话的 NH 请求 - “会话已关闭!”

    NHibernate版本 2 1 我正在使用似乎非常标准的 HttpModule 方法来在 ASP NET NHibernate 应用程序中实现每个请求会话 我正在尝试利用杠杆WebSessionContext 但它似乎无法正常工作 具体来
  • 如何通过按下 NSButton 来显示键盘?

    我只知道在 iOS 上显示键盘的几种方法 触摸文本字段 搜索栏 文本视图 是否可以通过触摸按钮来显示键盘 如果按钮没有标题或可以重命名 我希望可以使用这种方式设置按钮标题 谢谢各位 您需要添加一个UITextField查看您的视图 然后致电
  • 如何使用 FParsec 解析注释

    我正在尝试使用 FParsec 从 s 表达式语言解析 lisp 风格的注释 我在上一个线程中解析单行注释时得到了一些帮助 如何转换 FParsec 解析器来解析空格 虽然这个问题已经解决 但我仍然需要解析多行注释 这是当前的代码 Read