基于逆波蘭記號(hào)電信計(jì)費(fèi)話單過(guò)濾算法設(shè)計(jì)
3.5 話單過(guò)濾表達(dá)式運(yùn)算算法的實(shí)現(xiàn)
話單過(guò)濾表達(dá)式最終將形成布爾值結(jié)果真或假,由此來(lái)判定該張?jiān)拞问欠癖幌到y(tǒng)過(guò)濾。算法分為語(yǔ)法分析、業(yè)務(wù)邏輯處理兩個(gè)部分。語(yǔ)法分析是利用堆棧運(yùn)算分解出原子表達(dá)式的過(guò)程;業(yè)務(wù)邏輯處理是針對(duì)原子表達(dá)式的語(yǔ)義作出相應(yīng)的業(yè)務(wù)處理并求得該原子表達(dá)式的布爾值。以下是算法的偽C語(yǔ)言代碼:
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è)計(jì)和開(kāi)發(fā)湖南電信本地網(wǎng)計(jì)費(fèi)系統(tǒng)過(guò)程中,運(yùn)用逆波蘭記號(hào)和堆棧技術(shù),基于ANSI C/C++開(kāi)發(fā)環(huán)境成功完成了計(jì)費(fèi)預(yù)處理的話單過(guò)濾系統(tǒng)。本算法稍加修改和擴(kuò)充就可以應(yīng)用到大部分涉及格式化文本和數(shù)據(jù)庫(kù)記錄過(guò)濾的應(yīng)用中。
評(píng)論