bblfsh / elixir-driver Goto Github PK
View Code? Open in Web Editor NEWbblfsh driver for Elixir
License: GNU General Public License v3.0
bblfsh driver for Elixir
License: GNU General Public License v3.0
We need to, for lack of a better word, normalize the AST before sending it to the go driver.
I'll try to summarize what I've learned about the AST.
There are some types whose AST representation are themselves:
:atom
)123
)3.14
)[1,2,3]
)"string"
){:this, :tuple}
, but {:not, :this, :tuple}
)The rest is represented as a 3-tuple with the following pattern:
{
:operator, # function name as an atom
[], # metadata (I think this is a keywords http://elixir-lang.org/getting-started/keywords-and-maps.html
[] # list of arguments
}
Some examples:
quote do: Enum
{:__aliases__, [alias: false], [:Enum]}
Learn about SpecialForms.
quote do: Module.Submodule.fun 1
{
{
:.,
[],
[
{:__aliases__, [alias: false], [:Module, :Submodule]},
:fun
]
},
[],
[1]
}
The tail argument for the :.
operator is always an atom.
quote do: fun(1,2)
{:fun, [], [1, 2]}
quote do: fun([1,2])
{:fun, [], [[1, 2]]}
quote do: MyModule.fun({:ok, 1, 2}, default: 4)
{{:., [], [{:__aliases__, [alias: false], [:MyModule]}, :fun]}, [],
[{:{}, [], [:ok, 1, 2]}, [default: 4]]}
[default: 4]
is a keywords and cannot be treated like a list.
quote do: def fun, do: 1
{:def, [context: Elixir, import: Kernel], [{:fun, [context: Elixir], Elixir}, [do: 1]]}
Look that block params in function definition seems no different than other keywords.
This is what I've learnt so far.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.