fix rule
This commit is contained in:
parent
45d41245f9
commit
a4aa4b5268
@ -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]).
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user