井号 (#) 在 OCaml 中的含义

Pound (#) meaning in 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" 表示:"The following code was generated from line 82 of lexer.mll"。 ocaml 编译器使用错误消息的信息。因此,如果 .ml 包含错误(这是因为程序员在 .mll 文件中编写了错误的代码),错误消息将指向 .mll 文件中的一行,而不是生成的 .ml 文件。