Я пытаюсь реализовать библиотеку с расширенными возможностями синтаксического анализа.Я решил, что буду использовать fsyacc, потому что знал об этом в университете.К сожалению, я столкнулся со следующей проблемой.
Я определил класс для заголовка моей грамматики ( Head ) и поместил его реализацию в один файл.Затем я определил синтаксический анализатор как:
...
%start head
%type <Head> head
...
Fsyacc генерирует разделенный модуль ( Parser ).Чтобы добиться успеха, он должен быть скомпилирован в следующем порядке: Head.fs
Parser.fs
Чтобы сделать эту библиотеку похожей на ту, которую вы можете найти в .NET, я хотел бы добавить статический Разобрать метод до Head .К сожалению, мне нужно было бы использовать методы из модуля Parser .
Я знаю, что такие зависимости типа можно решить с помощью ' и 'оператор, но он применим только к типам, определенным в одном файле.
Есть ли другой способ создания типов, которые зависят друг от друга, даже если они находятся в отдельных файлах? Я искал механизм разделения объявления / реализации, подобный тому, который был в C / C ++, ноЯ ничего не смог найти.