Current section

Files

Jump to
eyg_parser src eyg@parser.erl
Raw

src/eyg@parser.erl

-module(eyg@parser).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/eyg/parser.gleam").
-export([from_string/1, all_from_string/1, block_from_string/1]).
-file("src/eyg/parser.gleam", 8).
-spec from_string(binary()) -> {ok,
{{eyg@ir@tree:expression({integer(), integer()}),
{integer(), integer()}},
list({eyg@parser@token:token(), integer()})}} |
{error, eyg@parser@parser:reason()}.
from_string(Src) ->
_pipe = Src,
_pipe@1 = eyg@parser@lexer:lex(_pipe),
_pipe@2 = eyg@parser@token:drop_whitespace(_pipe@1),
_pipe@3 = eyg@parser@token:drop_comments(_pipe@2),
eyg@parser@parser:expression(_pipe@3).
-file("src/eyg/parser.gleam", 16).
-spec all_from_string(binary()) -> {ok,
{eyg@ir@tree:expression({integer(), integer()}), {integer(), integer()}}} |
{error, eyg@parser@parser:reason()}.
all_from_string(Src) ->
gleam@result:'try'(
from_string(Src),
fun(_use0) ->
{Source, Remaining} = _use0,
case Remaining of
[] ->
{ok, Source};
[{Token, At} | _] ->
{error, {unexpected_token, Token, At}}
end
end
).
-file("src/eyg/parser.gleam", 37).
-spec do_gather(
{eyg@ir@tree:expression(GDU), GDU},
list({binary(), {eyg@ir@tree:expression(GDU), GDU}, GDU})
) -> {list({binary(), {eyg@ir@tree:expression(GDU), GDU}, GDU}),
gleam@option:option({eyg@ir@tree:expression(GDU), GDU})}.
do_gather(Exp, Acc) ->
{Exp@1, Span} = Exp,
case Exp@1 of
{'let', Label, Value, Then} ->
do_gather(Then, [{Label, Value, Span} | Acc]);
vacant ->
{Acc, none};
_ ->
{Acc, {some, {Exp@1, Span}}}
end.
-file("src/eyg/parser.gleam", 24).
-spec block_from_string(binary()) -> {ok,
{{list({binary(),
{eyg@ir@tree:expression({integer(), integer()}),
{integer(), integer()}},
{integer(), integer()}}),
gleam@option:option({eyg@ir@tree:expression({integer(),
integer()}),
{integer(), integer()}})},
list({eyg@parser@token:token(), integer()})}} |
{error, eyg@parser@parser:reason()}.
block_from_string(Src) ->
Parsed = begin
_pipe = Src,
_pipe@1 = eyg@parser@lexer:lex(_pipe),
_pipe@2 = eyg@parser@token:drop_whitespace(_pipe@1),
_pipe@3 = eyg@parser@token:drop_comments(_pipe@2),
eyg@parser@parser:block(_pipe@3)
end,
case Parsed of
{ok, {Exp, Left}} ->
{ok, {do_gather(Exp, []), Left}};
{error, Reason} ->
{error, Reason}
end.