From 35b95cbd12d217be07f2d7338d5d269d1770cc21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Fri, 28 Jul 2000 13:25:40 -0700 Subject: [PATCH] optimized Rev: lib/modules/Parser.pmod/C.pmod:1.9 --- lib/modules/Parser.pmod/C.pmod | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/modules/Parser.pmod/C.pmod b/lib/modules/Parser.pmod/C.pmod index 13064efabb..2e102c2d4b 100644 --- a/lib/modules/Parser.pmod/C.pmod +++ b/lib/modules/Parser.pmod/C.pmod @@ -1,4 +1,4 @@ -mapping(string:string) global_groupings=(["}":"{",")":"(","]":"["]); +mapping(string:string) global_groupings=(["{":"}","(":")","[":"]"]); array(string) split(string data) { @@ -259,21 +259,25 @@ array(Token) tokenize(array(string) s, void|string file) array group(array(string|Token) tokens, void|mapping groupings) { + Stack.stack stack=Stack.stack(); array(Token) ret=({}); + mapping actions=([]); + if(!groupings) groupings=global_groupings; + + foreach((array)groupings,[string x, string y]) + { + actions[x]=1; + actions[y]=2; + } + foreach(tokens, Token token) { - ret+=({ token }); - if(string rev=groupings [ (string)token ]) + switch(actions[(string)token]) { - for(int q=sizeof(ret)-1;q>=0;q--) - { - if(ret[q] == rev) - { - ret=ret[..q-1]+({ ret[q..] }); - break; - } - } + case 0: ret+=({token}); break; + case 1: stack->push(ret); ret=({token}); break; + case 2: ret=stack->pop()+({ ret + ({token}) }); } } return ret; -- GitLab