This commit is contained in:
安礼成 2023-03-01 20:44:19 +08:00
parent fc53ed34b9
commit 45d41245f9

View File

@ -11,6 +11,8 @@
%% API
-export([parse/1, test/0]).
-export([parse_bracket/1]).
test() ->
%Rule = <<"SELECT * FROM service.data WHERE id > 0 AND (name = 'anlicheng' OR name = 'test')">>,
@ -133,3 +135,29 @@ get_tag(_) ->
complex.
%%
parse_bracket(Tokens) ->
parse_bracket(Tokens, [], []).
parse_bracket([], [], S) ->
lists:reverse(S);
parse_bracket([], Acc, S) ->
lager:debug("acc is: ~p", [Acc]),
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]);
parse_bracket([H|Tokens], Acc, S) ->
parse_bracket(Tokens, [H|Acc], S).
parse_bracket0([$(|Tokens], Acc) ->
Child = parse_bracket(Tokens),
parse_bracket0([$)|Tokens], Acc) ->
Child = lists:reverse(Acc),
{Child, Tokens};
parse_bracket0([H|Tokens], Acc) ->
parse_bracket0(Tokens, [H|Acc]).