Я пишу переводчика для экспериментального языка. Три основные конструкции языка - это определения, утверждения и выражения. Определения могут содержать утверждения и выражения, операторы могут содержать определения и выражения, а один вид выражения может содержать утверждения. Я представляю все эти типы соединений, поэтому я могу легко использовать сопоставление шаблонов. В идеале, я хотел бы поместить код для них в разные файлы, но OMake жалуется на проблемы с круговой зависимостью. Насколько я знаю, описания круговых типов в разных модулях не допускаются.
Единственный способ решить эту проблему - определить сразу все три типа:
type defn = ...
and stmt = ...
and expr = ...
Похоже, для этого требуется, чтобы весь код для типов находился в одном файле. Есть ли способ обойти это? Как вы имеете дело с круговыми определениями в вашем коде?