2010-06-29 2 views
5

Я хотел бы получить AST для данной программы OCaml (я хотел бы пройти AST и сгенерировать инструментальную версию кода или сделать какое-то преобразование, например). Поддерживает ли какой-либо из инструментов OCaml эту функцию?Возможно ли получить AST для программы OCaml?

ответ

4

camlp4 - это путь. Вот motivating example. Документы разрежены - правда, но можно прочесть его через вики, существующие примеры, tutorials и, возможно, даже источники camlp4.

+0

Что делает этот мотивирующий пример? – aneccodeal

+0

Вставляет вызовы co Camlp4prof.count (чтение «произвольной») функции в начале каждого определения анализируемой функции, передающей параметры имени и местоположения. – ygrek

+0

Активное обсуждение ресурсов для изучения camlp4: http://groups.google.com/group/fa.caml/browse_thread/thread/1751a2c308742ac3?hl=ru – nlucaroni

2

Что вы ищете [camlp4] [1]. Я раньше не использовал camlp4, поэтому я не могу подтвердить его достоинства как программного обеспечения. Я слышал о людях, использующих camlp5 [http://pauillac.inria.fr/~ddr/camlp5/], который, согласно википедии, имеет лучшую документацию, чем текущая версия camlp4.

+0

Я думал, что camlp4 использовался для изменения и настройки синтаксиса OCaml, но я полагаю, что имеет смысл, что он может как-то добраться до AST. – aneccodeal

1

С OCaml 4.02.1 можно точно использовать PPX tools written bu Alain Frisch. Пример:

% ocamlfind ppx_tools/dumpast -e "1 + 2" 
1 + 2 
==> 
{pexp_desc = 
    Pexp_apply ({pexp_desc = Pexp_ident {txt = Lident "+"}}, 
    [("", {pexp_desc = Pexp_constant (Const_int 1)}); 
    ("", {pexp_desc = Pexp_constant (Const_int 2)})])} 
========= 

Можно использовать эту программу, чтобы сбросить AST нормального кода файла, а также и различные варианты управления степенью точности отвала. В приведенном выше примере, например, параметры местоположения АСТ скрыты.

0

Для этого вы можете использовать compiler-libs. См. Parsetree, Asttypes и Ast_helper.

 Смежные вопросы

  • Нет связанных вопросов^_^