Фунт (#) означает в OCaml - PullRequest
0 голосов
/ 05 мая 2018

Я выполняю задание 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>?

1 Ответ

0 голосов
/ 05 мая 2018

Вы правы, это сгенерированный файл. А именно, он был сгенерирован из файла с именем lexer.mll (который является файлом ocamllex).

Строки, начинающиеся с #, связывают код в сгенерированном файле со строками в исходном файле. Например, # 82 "lexer.mll" означает: «Следующий код был сгенерирован из строки 82 файла lexer.mll». Компилятор ocaml использует информацию для сообщений об ошибках. Поэтому, если файл .ml содержит ошибку (которая может произойти из-за того, что программист записал неверный код в файл .mll), сообщение об ошибке будет указывать на строку в файле .mll, а не на сгенерированный файл .ml.

...