基于逆波蘭記號電信計費話單過濾算法設(shè)計
話單過濾表達式最終將形成布爾值結(jié)果真或假,由此來判定該張話單是否被系統(tǒng)過濾。算法分為語法分析、業(yè)務(wù)邏輯處理兩個部分。語法分析是利用堆棧運算分解出原子表達式的過程;業(yè)務(wù)邏輯處理是針對原子表達式的語義作出相應(yīng)的業(yè)務(wù)處理并求得該原子表達式的布爾值。以下是算法的偽C語言代碼:
STACK stack;
Bool result;
String suffixexpress;
Bool SyntaxAnlysis(suffixexpress){
SETNULL(stack);
Terminalsymb=GetNextTerminalsymb(suffixexpress);
While (!IsNull(Terminalsymb)) {
Switch(Terminalsymb){
Case A to N PUSH(stack,Terminalsymbol);
Case > to =
POP(stack,value);
POP(stack,factor_code);
Comparesymb=Terminalsymb;
Result=LogicProcess(factor_code,Com
paresymbol,value);
PUSH(stack,result)
Case ∪,∩
POP(stack,result1);
POP(stack,result2);
Logicalsymb=Terminalsymb;
Result=BoolProcess(result1,Logicalsymbol,result2);
PUSH(stack,result);
}
Terminalsymbol=GetNextTerminalsymbol(suffixexpress);
}
return TOP(stack);
}
在設(shè)計和開發(fā)湖南電信本地網(wǎng)計費系統(tǒng)過程中,運用逆波蘭記號和堆棧技術(shù),基于ANSI C/C++開發(fā)環(huán)境成功完成了計費預(yù)處理的話單過濾系統(tǒng)。本算法稍加修改和擴充就可以應(yīng)用到大部分涉及格式化文本和數(shù)據(jù)庫記錄過濾的應(yīng)用中。
評論