This commit is contained in:
安礼成 2023-03-03 11:19:55 +08:00
parent 45d41245f9
commit a4aa4b5268

View File

@ -134,30 +134,60 @@ get_tag(0) ->
get_tag(_) ->
complex.
-record(bracket, {
items = []
}).
%%
parse_bracket(Tokens) ->
parse_bracket(Tokens, [], []).
parse_bracket([], [], S) ->
lists:reverse(S);
#bracket{items = lists:reverse(S)};
parse_bracket([], Acc, S) ->
lager:debug("acc is: ~p", [Acc]),
lists:reverse([lists:reverse(Acc)|S]);
#bracket{items = lists:reverse([lists:reverse(Acc)|S])};
parse_bracket([$(|Tokens], Acc, S) ->
{Child, RestTokens} = parse_bracket0(Tokens, []),
%lager:debug("child is: ~p, rest: ~p, s1: ~p", [Child, RestTokens, [Child, lists:reverse(Acc)|S]]),
parse_bracket(RestTokens, [], [Child, lists:reverse(Acc)|S]);
{ChildElements, RestTokens} = parse_bracket0(Tokens),
Bracket = parse_bracket(ChildElements),
parse_bracket(RestTokens, [], [Bracket, lists:reverse(Acc)|S]);
parse_bracket([H|Tokens], Acc, S) ->
parse_bracket(Tokens, [H|Acc], S).
parse_bracket0([$(|Tokens], Acc) ->
Child = parse_bracket(Tokens),
%%
parse_bracket0(Tokens) ->
parse_bracket0(Tokens, [], 1).
parse_bracket0([$)|Tokens], Acc, Level) when Level - 1 == 0 ->
{lists:reverse(Acc), Tokens};
parse_bracket0([$)|Tokens], Acc, Level) ->
parse_bracket0(Tokens, [$)|Acc], Level - 1);
parse_bracket0([$(|Tokens], Acc, Level) ->
parse_bracket0(Tokens, [$(|Acc], Level + 1);
parse_bracket0([H|Tokens], Acc, Level) ->
parse_bracket0(Tokens, [H|Acc], Level).
%%
%{bracket,["id < 3 OR ",
% {bracket,["name = 'anlicheng' OR ",
% {bracket,["name = 'test' AND ",
% {bracket,["y = 1 OR x = 1"]}]}]},
% " OR ",
% {bracket,["1 = 1"]}]}
syntax(Bracket = #bracket{items = Items}) ->
lists:map(fun(E) ->
case E of
B = #bracket{} ->
syntax(B);
Expr ->
string:split(Expr, "AND", all)
end
end, Items),
ok.
parse_bracket0([$)|Tokens], Acc) ->
Child = lists:reverse(Acc),
{Child, Tokens};
parse_bracket0([H|Tokens], Acc) ->
parse_bracket0(Tokens, [H|Acc]).