update the ec_semver_parser
This commit is contained in:
parent
16b441f0e3
commit
54f568e826
1 changed files with 6 additions and 7 deletions
|
@ -1,4 +1,3 @@
|
||||||
%%% vi:ts=4 sw=4 et
|
|
||||||
-module(ec_semver_parser).
|
-module(ec_semver_parser).
|
||||||
-export([parse/1,file/1]).
|
-export([parse/1,file/1]).
|
||||||
-compile({nowarn_unused_function,[p/4, p/5, p_eof/0, p_optional/1, p_not/1, p_assert/1, p_seq/1, p_and/1, p_choose/1, p_zero_or_more/1, p_one_or_more/1, p_label/2, p_string/1, p_anything/0, p_charclass/1, p_regexp/1, p_attempt/4, line/1, column/1]}).
|
-compile({nowarn_unused_function,[p/4, p/5, p_eof/0, p_optional/1, p_not/1, p_assert/1, p_seq/1, p_and/1, p_choose/1, p_zero_or_more/1, p_one_or_more/1, p_label/2, p_string/1, p_anything/0, p_charclass/1, p_regexp/1, p_attempt/4, line/1, column/1]}).
|
||||||
|
@ -6,7 +5,7 @@
|
||||||
|
|
||||||
-compile(export_all).
|
-compile(export_all).
|
||||||
-spec file(file:name()) -> any().
|
-spec file(file:name()) -> any().
|
||||||
file(Filename) -> {ok, Bin} = file:read_file(Filename), parse(Bin).
|
file(Filename) -> case file:read_file(Filename) of {ok,Bin} -> parse(Bin); Err -> Err end.
|
||||||
|
|
||||||
-spec parse(binary() | list()) -> any().
|
-spec parse(binary() | list()) -> any().
|
||||||
parse(List) when is_list(List) -> parse(list_to_binary(List));
|
parse(List) when is_list(List) -> parse(list_to_binary(List));
|
||||||
|
@ -19,19 +18,19 @@ parse(Input) when is_binary(Input) ->
|
||||||
release_memo(), Result.
|
release_memo(), Result.
|
||||||
|
|
||||||
'semver'(Input, Index) ->
|
'semver'(Input, Index) ->
|
||||||
p(Input, Index, 'semver', fun(I,D) -> (p_seq([fun 'major_minor_patch_min_patch'/2, p_optional(p_seq([p_string(<<"-">>), fun 'alpha_part'/2, p_zero_or_more(p_seq([p_string(<<".">>), fun 'alpha_part'/2]))])), p_optional(p_seq([p_string(<<"+">>), fun 'alpha_part'/2, p_zero_or_more(p_seq([p_string(<<".">>), fun 'alpha_part'/2]))])), p_not(p_anything())]))(I,D) end, fun(Node, _Idx) -> ec_semver:internal_parse_version(Node) end).
|
p(Input, Index, 'semver', fun(I,D) -> (p_seq([fun 'major_minor_patch_min_patch'/2, p_optional(p_seq([p_string(<<"-">>), fun 'alpha_part'/2, p_zero_or_more(p_seq([p_string(<<".">>), fun 'alpha_part'/2]))])), p_optional(p_seq([p_string(<<"+">>), fun 'alpha_part'/2, p_zero_or_more(p_seq([p_string(<<".">>), fun 'alpha_part'/2]))])), p_not(p_anything())]))(I,D) end, fun(Node, _Idx) -> ec_semver:internal_parse_version(Node) end).
|
||||||
|
|
||||||
'major_minor_patch_min_patch'(Input, Index) ->
|
'major_minor_patch_min_patch'(Input, Index) ->
|
||||||
p(Input, Index, 'major_minor_patch_min_patch', fun(I,D) -> (p_seq([p_choose([p_seq([p_optional(p_string(<<"v">>)), fun 'numeric_part'/2]), fun 'alpha_part'/2]), p_optional(p_seq([p_string(<<".">>), fun 'version_part'/2])), p_optional(p_seq([p_string(<<".">>), fun 'version_part'/2])), p_optional(p_seq([p_string(<<".">>), fun 'version_part'/2]))]))(I,D) end, fun(Node, Idx) -> transform('major_minor_patch_min_patch', Node, Idx) end).
|
p(Input, Index, 'major_minor_patch_min_patch', fun(I,D) -> (p_seq([p_choose([p_seq([p_optional(p_string(<<"v">>)), fun 'numeric_part'/2]), fun 'alpha_part'/2]), p_optional(p_seq([p_string(<<".">>), fun 'version_part'/2])), p_optional(p_seq([p_string(<<".">>), fun 'version_part'/2])), p_optional(p_seq([p_string(<<".">>), fun 'version_part'/2]))]))(I,D) end, fun(Node, Idx) ->transform('major_minor_patch_min_patch', Node, Idx) end).
|
||||||
|
|
||||||
'version_part'(Input, Index) ->
|
'version_part'(Input, Index) ->
|
||||||
p(Input, Index, 'version_part', fun(I,D) -> (p_choose([fun 'numeric_part'/2, fun 'alpha_part'/2]))(I,D) end, fun(Node, Idx) -> transform('version_part', Node, Idx) end).
|
p(Input, Index, 'version_part', fun(I,D) -> (p_choose([fun 'numeric_part'/2, fun 'alpha_part'/2]))(I,D) end, fun(Node, Idx) ->transform('version_part', Node, Idx) end).
|
||||||
|
|
||||||
'numeric_part'(Input, Index) ->
|
'numeric_part'(Input, Index) ->
|
||||||
p(Input, Index, 'numeric_part', fun(I,D) -> (p_one_or_more(p_charclass(<<"[0-9]">>)))(I,D) end, fun(Node, _Idx) -> erlang:list_to_integer(erlang:binary_to_list(erlang:iolist_to_binary(Node))) end).
|
p(Input, Index, 'numeric_part', fun(I,D) -> (p_one_or_more(p_charclass(<<"[0-9]">>)))(I,D) end, fun(Node, _Idx) ->erlang:list_to_integer(erlang:binary_to_list(erlang:iolist_to_binary(Node))) end).
|
||||||
|
|
||||||
'alpha_part'(Input, Index) ->
|
'alpha_part'(Input, Index) ->
|
||||||
p(Input, Index, 'alpha_part', fun(I,D) -> (p_one_or_more(p_charclass(<<"[A-Za-z0-9]">>)))(I,D) end, fun(Node, _Idx) -> erlang:iolist_to_binary(Node) end).
|
p(Input, Index, 'alpha_part', fun(I,D) -> (p_one_or_more(p_charclass(<<"[A-Za-z0-9]">>)))(I,D) end, fun(Node, _Idx) ->erlang:iolist_to_binary(Node) end).
|
||||||
|
|
||||||
|
|
||||||
transform(_,Node,_Index) -> Node.
|
transform(_,Node,_Index) -> Node.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue