У меня есть файл tokens.ml
, в котором есть оператор type token
. У меня также есть tokens.mli
с тем же оператором type token
. Теперь у меня есть parser.mly
, который использует токены от tokens.mly
. Я хочу, чтобы мои токены были в tokens.ml/mli
, а мой парсер - parser.mly
.
Итак, я попытался скомпилировать парсер с помощью команды
menhir parser.mly --table --explain --external-tokens Tokens
Это дает мне ошибку, говоря, что один из моих токенов не существует. В частности,
File "parser.mly", line 173, characters 4-12:
Error: OPERATOR is undefined.
Итак, менгир не находит модуль Tokens
. Я не знаю, как сделать это видимым для menhir
. Я попытался создать библиотеку tokens.cma
, но даже тогда я все еще получаю ту же ошибку.
Менгиру, кажется, все равно, если модуль не существует, потому что, если я выполню команду
menhir parser.mly --table --explain --external-tokens SomeNonExistentModule
По-прежнему выдает ту же ошибку о том, что OPERATOR
не определено.
Как мне заставить Менгира найти модуль моих токенов. Я бы предпочел не использовать ocamlbuild. Если вы предлагаете решение ocamlbuild, пожалуйста, объясните хотя бы промежуточные шаги, которые я мог бы выполнить вместо этого. Я хочу понять, чего ожидает Менгир.