주어진 OCaml 프로그램에 대해 AST를 얻을 수 있기를 원합니다. (예 : AST를 사용하고 계측 된 버전의 코드를 생성하거나 일종의 변환을 수행하고 싶습니다.) OCaml 도구 중 어떤 것이이 기능을 지원합니까?OCaml 프로그램에서 AST를 얻을 수 있습니까?
답변
camlp4 가지 방법입니다. 다음은 motivating example입니다. 문서는 드문 드문 사실이지만 위키, 기존 예제, tutorials 및 어쩌면 camlp4 소스를 통해 독서를 할 수 있습니다.
[camlp4] [1] (이)가 원하는 것은 무엇입니까? 전에 camlp4를 사용하지 않았으므로 소프트웨어로서의 미덕을 증명할 수는 없습니다. Camlp5 [http://pauillac.inria.fr/~ddr/camlp5/]]을 사용하는 사람들에 대해 들어 봤는데, 위키 백과에 따르면 camlp4의 현재 버전보다 더 나은 문서가 있습니다.
camlp4는 OCaml 구문을 수정하고 사용자 지정하는 데 사용되는 것으로 생각했지만 어쨌든 AST에 연결할 수 있다고 생각합니다. – aneccodeal
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를 덤프하기 위해이 프로그램을 사용하는 것이 가능하며, 다양한 옵션은 덤프의 정밀도의 정도를 제어합니다. 예를 들어 위의 예에서 AST의 위치 매개 변수는 숨겨져 있습니다.
compiler-libs
을 사용하면이 작업을 수행 할 수 있습니다. Parsetree
, Asttypes
및 Ast_helper
을 참조하십시오.
그 동기 부여 예제는 무엇을합니까? – aneccodeal
Insert는 이름과 위치 매개 변수를 전달하는 각 구문 분석 된 함수 정의의 시작 부분에 Camlp4prof.count ("임의"읽기) 함수를 호출합니다. – ygrek
camlp4에 대해 자세히 알아 보려면 다음 리소스를 참조하십시오. http://groups.google.com/group/fa.caml/browse_thread/thread/1751a2c308742ac3?hl=ko – nlucaroni