← zpět

Zpracování aritmetického výrazu, gramatiky

Úlohy

Kalkulačka

Napište program, který na vstupu přijme aritmetický výraz (s operátory sčítání, násobení a odčítání) v postfixové (RPN) notaci. Na výstup vypíše hodnotu výrazu.

Můžete předpokládat, že čísla a operátory budou oddělené právě jednou mezerou.

Co jsme dnes probrali

Zápis aritmetického výrazu

Infixový zápis

Postfixový zápis

Prefixový zápis

Zpracování výrazu

Abstraktní syntaktický strom

Lexer

Parser

Gramatika

E => S
S => S + P
S => P
P => P * N
P => N
N => number

Příklad parsování

Pojďme zkusit rozparsovat výraz 1 + 3 + 2.

  1. Tento výraz je E.
  2. Aplikujeme pravidlo E => S.
  3. Pro první + aplikujeme S => S + P
    • Číslo 1 transformuje jako S => P => N => number
    • Číslo 3 transformuje jako P => N => number
    • Máme (1 + 3)
  4. Pro druhé + aplikujeme S => S + P
    • Levou stranu máme: (1 + 3)
    • Pravá strana, číslo 2, se transformuje jako P => N => number
    • Tím dostaneme ((1 + 3) + 2)

Poznámka: závorky nejsou symboly z gramatiky, znázorňují pouze postup parsování (a asociativitu sčítání z něj plynoucí).