Преобразовать Elixir AST в Erlang AST? Является ли это возможным?

Можно ли взять выражение Elixir в кавычках (дерево AST) следующим образом:

quote do: 1 + 1
=> {:+, [context: Elixir, import: Kernel], [1, 1]}

И преобразовать его в Erlang AST?

Я просмотрел модуль кода, а также некоторые модули ядра в поисках функции, которая это делает, но ничего не нашел. Я даже не уверен, возможно ли это... Я не знаю, как такие вещи, как макросы Elixir, будут представлены в Erlang AST.

Заранее спасибо!


person Stratus3D    schedule 14.11.2013    source источник


Ответы (2)


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

person José Valim    schedule 14.11.2013

Например, я написал «суть», как это можно сделать — https://gist.github.com/habibutsu/bc6791d3d81b6ea54e1a

Используются две функции:

fun elixir:'string_to_quoted!'/4
fun elixir:quoted_to_erl/3
person Habibutsu    schedule 14.01.2016