45 lines
1.2 KiB
Erlang
45 lines
1.2 KiB
Erlang
% Lexer syntax for the Elixir language done with leex
|
|
% Copyright (C) 2011 Jose Valim
|
|
|
|
Definitions.
|
|
|
|
D = [0-9]
|
|
U = [A-Z]
|
|
L = [a-z]
|
|
WS = [\s]
|
|
|
|
Rules.
|
|
|
|
{D}+\.{D}+ : { token, { float, TokenLine, list_to_float(TokenChars) } }.
|
|
{D}+ : { token, { integer, TokenLine, list_to_integer(TokenChars) } }.
|
|
({L}|_)({U}{L}{D}|_)* : { token, var(TokenChars, TokenLine) }.
|
|
|
|
\+ : { token, { '+', TokenLine } }.
|
|
- : { token, { '-', TokenLine } }.
|
|
\* : { token, { '*', TokenLine } }.
|
|
/ : { token, { '/', TokenLine } }.
|
|
\( : { token, { '(', TokenLine } }.
|
|
\) : { token, { ')', TokenLine } }.
|
|
= : { token, { '=', TokenLine } }.
|
|
-> : { token, { '->', TokenLine } }.
|
|
; : { token, { ';', TokenLine } }.
|
|
|
|
{Comment} : skip_token.
|
|
{WS}+ : skip_token.
|
|
% ({Comment}|{Whitespace})*(\n({Comment}|{Whitespace})*)+ : { token, { eol, TokenLine } }.
|
|
|
|
Erlang code.
|
|
|
|
var(Chars, Line) ->
|
|
Atom = list_to_atom(Chars),
|
|
case reserved_word(Atom) of
|
|
true -> {Atom, Line};
|
|
false -> {var, Line, Atom}
|
|
end.
|
|
|
|
reserved_word('nil') -> true;
|
|
reserved_word('true') -> true;
|
|
reserved_word('false') -> true;
|
|
reserved_word('module') -> true;
|
|
reserved_word(_) -> false.
|