Current section
Files
Jump to
Current section
Files
src/dtu.erl
-module(dtu).
%% API exports
-export([main/1]).
%%====================================================================
%% API functions
%%====================================================================
%% escript Entry point
main(["lex_string", String]) ->
print(lex_string(String));
main(["ast_string", String]) ->
print(ast_string(String));
main(["ast_file", Path]) ->
print(ast_file(Path));
main(Args) ->
io:format("Args: ~p~n", [Args]),
erlang:halt(0).
lex_string(String) ->
case dtu_lexer:string(String) of
{ok, Tokens, Endline} ->
{ok, Tokens, Endline};
{eof, Endline} ->
{error, {Endline, dtu_lexer, {eof, Endline}}, []};
{error, Error} ->
{error, Error, []};
{error, Error, Extra} ->
{error, Error, Extra}
end.
ast_file(Path) ->
case file:read_file(Path) of
{ok, Data} ->
ast_string(binary_to_list(Data));
Other ->
Other
end.
ast_string(String) ->
case lex_string(String) of
{ok, Tokens, _Endline} ->
dtu_parser:parse(Tokens);
Other ->
Other
end.
print({ok, Value}) ->
io:format("~p~n", [Value]);
print({ok, Value, _}) ->
io:format("~p~n", [Value]);
print({error, {Line, dtu_parser, Reason}}) ->
io:format("Error:~p: ~s~n", [Line, Reason]);
print({error, Reason}) ->
io:format("Error: ~p~n", [Reason]);
print({error, Reason, Extra}) ->
io:format("Error: ~p~n ~p~n", [Reason, Extra]).
%%====================================================================
%% Internal functions
%%====================================================================