Когда я использую fram-c для написания парсера. Я столкнулся с проблемой, что Ast.get() возвращает тип Cil_types.file, но мне нужен Cil.file для дальнейшего использования. На самом деле они имеют одинаковые поля, но компилятор ocaml просто не позволяет прямому назначению из Cil_types.file в Cil.file. Есть ли какие-либо функции литья в Ocaml, которые могут помочь мне сделать это.Как преобразовать тип данных из Cil_types в Cil
Пс: Я пытаюсь назначить каждое поле файла Cil_types.file в Cil.file, но такая же проблема происходит рекурсивно (не разрешайте Cil.file. * = Cil_types.file. *). Я очень ценю вашу помощь!
Привет, изначально я также считаю, что Cil_types.file и Cil.file не должны использоваться в одном файле. Однако функция Ast.get() вернет Cil_type.file(), которая определена в [frama-c-Nitrogen-20111001/src/kernel/ast.ml] (http://docs.camlcity.org/docs /godisrc/frama-c-Nitrogen-20111001.tar.gz/frama-c-Nitrogen-20111001/src/kernel/ast.ml) И функции computeGraph() будет нужен Cil.file в качестве входа. Что я могу сделать для преобразования двух фактически одного и того же типа данных? – FakeJohn
На самом деле, почему я столкнулся с этой проблемой, я сейчас модифицирую проект, написанный в версии Frama-c-Lithium_20081201. Он использует computeGraph (Cil_state.file). Однако в следующей версии Frama-c он изменяет Cil_state на Ast и Cil_state.file на Ast.get(). который изменяет тип возвращаемого значения на Cil_types.file. Я не знаю, как заполнить пробел :( – FakeJohn
Возможно, вы можете попробовать запустить скрипты в bin/в порядке атомных элементов, что делает большую часть преобразования. Сценарий lithium2beryllium, похоже, делает то, что вы хотите. –