井号 (#) 在 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 文件。
我正在做一个 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 文件。