IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Parser jednoduchých matematických výrazov v C #

Tento jednoduchý parser je postavený na algoritme Shunting-Yard. Spracovanie matematického výrazu je rozdelené do 3 častí. V prvej časti sa výraz rozbije na tzv. Tokeny pomocou Tokenizeru (Lexer). Token je jedna samostatná časť výrazu s určitým významom. Ide o čísla, operátormi a funkcie.

Tokenizer môže byť veľa jednoduchý alebo aj pomerne komplexné podľa toho, ako benevolentný zápis matematických výrazov budeme chcieť spracovávať. Jedná sa hlavne o medzery medzi jednotlivými prvkami výrazu, zátvorky u funkcií s jedným parametrom, zápis unárne operátorov a pod.

Tento parser využíva trochu zložitejšie Tokenizer, ktorému nevadí medzery medzi jednotlivými prvkami výrazu. Dokáže rozdeliť aj funkciu s jedným parametrom bez zátvoriek (abs(5) ; abs5) a to aj s unárním operátorom negácie (abs-5). Rozozná implicitné násobený pod.

V ďalšej fáze nasleduje prevod z infixové notácie na postfixovou (tzv. Reverse-Polish notation). Prevod prebieha preto, lebo matematický výraz v infixové notáciu sa nedá spracovať iba čítaním a počítaním zľava doprava. Operátorov v infixové notáciu majú dve dôležité vlastnosti. A sú to prednosť (Precedencia) a Asociativita (Associativity).

V Postfixové notáciu sú však tieto vlastnosti zanedbateľné, pretože jednotlivé prvky matematického výrazu sú zapísané v konkrétnom poradí, kedy sú najprv uvedené operandmi a až potom operátor, ktorý prevádza akciu na týchto operandoch. Vďaka tomuto zápisu sa potom dá prevedený výraz spracovať čítaním zľava doprava. Pr.

Infixová notácie: 3 + 3 Postfixová notácie: 3 3 +

Keď sa pozrieme na trochu zložitejšie príklad, v ktorom budeme musieť vziať do úvahy aj prednosť operátorov:

Infixová notácie: 2 + 3 * 4 Postfixová notácie: 2 3 4 * +

V poslednej fáze dochádza k samotnému výpočtu, ktorý prebieha tak, že sa postupuje zľava doprava. keď sa narazí na operátor, tak sa zoberie konkrétny počet parametrov vľavo od operátora (tu 2 a 3) a vykoná sa daná akcia (tu násobenie). Tým dostaneme výraz 2 12 +. Nasleduje posledná operand (+), ktorý spočíta zostávajúce čísla a tým dostaneme výsledok 14.

Detailný popis spôsobu prevodu možno nájsť na Wikipédii.

Keď si program spustíte, tak budete môcť zapísať matematický výraz, ktorého výsledok si chcete nechať zobraziť. Zároveň sa vám zobrazia jednotlivé Tokeny, na ktorej bol výraz rozdelený a tiež ako daný výraz vyzerá v postfixové notáciu.


Galéria


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 373x (3.68 MB)

 

Všetky články v sekcii
Zdrojákoviště C # .NET - Objektovo orientované programovanie
Program pre vás napísal d4rkw34v3r
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
-
Aktivity