Tak ja sa pokusim - polopatisticky, pre potrebu zadania:
- priorita rastie z hora nadol (cize ked ma mat * vacsiu prioritu ako + tak musi byt v gramatike nizsie, na nizsim riadku)
- pre kazdy operator s inou prioritou je potrebne spravit "novy riadok gramatiky"
- podla asociativnosti bude mat dany riadok tvar:
- ľavá: Vyraz -> Podvyraz { op Podvyraz }
- pravá: Vyraz -> Podvyraz [ op Vyraz ]
- neasociatívnosť: Vyraz -> Podvyraz [ op Podvyraz ]
(vyraz znamena nazov retazca, podvyraz znamena nazov retazca o riadok nizsie, op je operand)
- uplne na konci je vyhodnotenie Terminalneho symbolu (symbol ktory nevyhodi SERROR) a zatvoriek - Term -> <value> | <(> Expr <)>
napriklad:
operator "+": lava asociativnost, najnizsia priorita
operator "*": prava asociativnost, stredna priorita
operator "^": neasociativne, najvyssia priorita
gramatika:
Expr -> Mul { <+> Mul}
Mul -> Pow [ <*> Mul]
Pow -> Term [ <^> Term]
Term -> <value> | <(> Expr <)>