首页 > 解决方案 > 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>

标签: syntaxocamlsemantics

解决方案


你是对的,这是一个生成的文件。也就是说,它是从一个名为lexer.mll(这是一个 ocamllex 文件)的文件中生成的。

以生成文件中的代码开头的#行与原始文件中的行相关联。因此,例如# 82 "lexer.mll"意味着:“以下代码是从 lexer.mll 的第 82 行生成的”。ocaml 编译器使用错误消息的信息。因此,如果 .ml 包含错误(这是因为程序员在 .mll 文件中编写了不正确的代码),错误消息将指向 .mll 文件中的一行,而不是生成的 .ml 文件。


推荐阅读