【问题标题】:C-style included file in ocamlyaccocamlyacc 中的 C 样式包含文件
【发布时间】:2014-05-01 04:54:05
【问题描述】:

谁能帮助我了解如何在 ocamlyacc 中启用 C 风格的包含文件?例如:#include "mylib.txt";

【问题讨论】:

  • OCaml 没有预处理器,因此没有对应于 C #include 机制的内容。根据您打算在 mylib.txt 中添加的内容,您最好的选择可能就是以通常的方式使用 OCaml 模块系统。
  • 可能我的问题还不够清楚。这里的#include 不是OCaml 代码,而是用我的代码解析的其他语言定义的目标源文件。在 C/C++ Yacc 中,有一种处理这种情况的机制,即更改输入流。但是,我在 ocamlyacc 中找不到任何方法来做同样的事情。
  • yacc 是一个生成 C 输出的预处理器。其输入中的一些代码只是直接传递到输出的 C 代码。在传递的 C 代码中,您可以拥有 #include "abc.h",然后在编译输出时由 C 预处理器处理。我完全不确定您要做什么。但由于 OCaml 没有预处理器,因此您必须使用不同的方案才能获得相同的结果。
  • 感谢杰弗里的回答。但是在我的情况下,使用 C 预处理器并不是一个好习惯,因为编译器应该确保包含的文件具有合法声明。无论如何,我在 OCaml 邮件列表中找到了一封旧邮件,解决了我的问题(经过一些修改):groups.google.com/forum/m/#!topic/fa.caml/_v_k4WTQV_Q

标签: include ocaml ocamlyacc


【解决方案1】:

#include 工具不是 yacc 的一部分,它是 C 的一部分。您可以将它与 yacc 一起使用,因为 yacc 生成 C 作为其输出。由于 OCaml 没有预处理器,因此您不能对 ocamlyacc 做同样的事情。

此功能与 yacc 的通常用途是在扫描器和解析器之间共享令牌定义。

使用 ocamlyacc,标准做法是在 ocamlyacc 输入中定义标记符号。然后在您的扫描仪中,您使用解析器模块中的名称。具体来说,您可以在扫描仪代码中open您的解析器模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多