syntax - OCaml 中的磅 (#) 含义
问题描述
我正在做 OCaml 作业,只是在窥探作业文件,在那里我发现了我认为是生成的文件。它有很多这样的代码,
match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
| 0 ->
# 81 "lexer.mll"
( TOK_EOF )
# 239 "lexer.ml"
| 1 ->
# 82 "lexer.mll"
( new_line lexbuf; TOK_WHITE )
# 244 "lexer.ml"
我对间距感到抱歉,但这就是它在文件中的显示方式。因为我真的不知道#
字符是否应该像那样在左边,所以我只是按照它出现的样子粘贴它。
表格的线条是什么意思# <number> <string>
?
解决方案
你是对的,这是一个生成的文件。也就是说,它是从一个名为lexer.mll
(这是一个 ocamllex 文件)的文件中生成的。
以生成文件中的代码开头的#
行与原始文件中的行相关联。因此,例如# 82 "lexer.mll"
意味着:“以下代码是从 lexer.mll 的第 82 行生成的”。ocaml 编译器使用错误消息的信息。因此,如果 .ml 包含错误(这是因为程序员在 .mll 文件中编写了不正确的代码),错误消息将指向 .mll 文件中的一行,而不是生成的 .ml 文件。
推荐阅读
- flutter - 如何使用 ReorderableListView 动画插入/删除项目
- json - 为什么 JSONEncoder 与枚举键字典的工作方式不同?
- android - Edittext 在其他线程上工作时失去焦点
- python - 我如何在一个代码块中编译所有变量?
- java - 当其他步骤正常工作时,Cucumber java 会抛出单个未定义的步骤
- python - python - 获取字典中第一个值的列表
- python - 层未构建错误,即使在 tensorflow 2.0.0 中的 model.build() 之后
- ios - Appcenter Push iOS - 控制何时请求推送权限
- c# - 验证服务描述符“ServiceType:INewsRepository Lifetime:Singleton ImplementationType:NewsRepository”时出错:
- php - Make comparison between 3 numbers in array