Возможно ли получить AST для программы OCaml? - PullRequest
5 голосов
/ 30 июня 2010

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

Ответы [ 4 ]

4 голосов
/ 30 июня 2010

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

2 голосов
/ 11 марта 2016

Начиная с OCaml 4.02.1, можно использовать инструменты PPX, написанные Аленом Фришем , чтобы точно сделать это.Пример:

% 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 из файла нормального кода, а различные параметры контролируют степень точности дампа.Например, в приведенном выше примере параметры местоположения AST скрыты.

2 голосов
/ 30 июня 2010

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

0 голосов
/ 24 февраля 2017

Вы можете использовать compiler-libs для достижения этой цели.См. Parsetree, Asttypes и Ast_helper.

...