Отличный вопрос. Вы должны использовать лучший инструмент для работы.
Если на самом деле ваши намерения состоят в том, чтобы использовать лучший инструмент для работы (и вы уверены, что lexx и yacc будут проблемой), тогда у меня есть чем поделиться с вами; вообще не больно звонить в ocaml из c, и наоборот. Большую часть времени я писал ocaml для вызова C, но несколько написал иначе. В основном это были функции отладки, которые не возвращают результат. Хотя обратные и четвертые призывы действительно касаются упаковки и распаковки типа ocaml value
на стороне C. Этот урок, который вы упоминаете, охватывает все это, и очень хорошо.
Я против высказываний Рона Сэвиджа о том, что вы должны быть знатоком языка. Я помню, как начинал с того места, где я работаю, и в течение нескольких месяцев, не зная, что такое «функтор», был в состоянии вызвать C и написал тысячу строк C для числовых рецептов и абстрактных типов данных, и произошли некоторые ошибки. (не с распаковкой типов, а с сборкой мусора абстрактных типов данных), но это было совсем не плохо. Большая часть внутренних циклов в проекте написана на языке C с использованием SSE, внешних библиотек (lapack), более узких оптимизированных циклов и некоторых встроенных сборок, оптимизированных вручную.
Я думаю, что вам может потребоваться опыт разработки большого проекта и разграничения функциональных и обязательных разделов. Я бы действительно оценил, сколько ocaml вы будете писать, и какие значения вы хотите передать C - я говорю это, потому что я бы боялся рекомендовать кому-то передать рекурсивную структуру данных из ocaml to C, на самом деле, было бы много распаковок кортежей, их содержимого и, следовательно, много возможностей для путаницы и ошибок.