Lekcija: Aritmetični izrazi

Iz MaFiRaWiki

Aritmetični izraz (celoštevilski): 13, 2+5*8, (16+7)*8...

Tj. neke vrste mini programski jezik.


Vsebina

Naloge

- kako opišemo (primerno za računsko obdelavo)aritmetične izraze? 
- kaj je njihov pomen? Predstavljajo neko število.
- kako izračunamo vrednost izraza? Pravila.

Cilj

- napisati program



Opis aritmetičnih izrazov


Konkretna sintaksa

Izraz je niz znakov; npr. "(3+8)*7" A ne predstavljajo vsi nizi veljavnih izrazov, npr.: "(3+8*7" ni veljavni izraz. Torej: kako prepoznamo veljavne nize? Kako jih opišemo? - Podamo sestavne dele izraza (npr.: števila, znake); te dele imenujemo tudi Leksemi , nato pa s pomočjo pravil(npr.: vsak oklepaj mora imeti svoj zaklepaj, prednostna pravila,...)sestavimo izraz tako, da je pravilen.

Konkretna sintaksa je primerna za ljudi (za konkreten vnos - lahko jo natipkamo), ni pa primerna za same računalnike.

Abstraktna sintaksa

Izraz je drevo (tj. matematična struktura, kot npr. še graf, množica,...)

Primer: konkretna sintkasa: "(3+8)*7"

  abstraktna sintaksa:  *
                       / \
           vozlišče-> +   7
                     / \
                    3   8 <- list

Pravila: - v listih so naravna števila - v vozliščih so znaki (+,*,/,-)

        minus lahko pomeni dvoje: * odštevanje: x-y ; binarni minus
                                  * negacija: -x ; unarni minus

Prednosti abstraktne sintakse pred konkretno: - ni neveljavnih dreves - ni oklepajev (ne potrebujemo jih več) - ni prioritete operatorjev (razvidno je iz same strukture drevesa)

  Primer:                     "(3+8*7)"
                               /      \
                              /        \
                             +    ?     *
                            / \        / \
                           3  *       +   7
                             / \     / \
                            8   7   3  8
                             OK        Ni OK
            Komentar: iz konkretne sintakse ni razvidno katero drevo je pravo, to nam povejo dolocena pravila.

- ni asociativnosti operatorjev (+,*,/ binarni -: so levo asociativni, unarni -: nima asociativnosti)


Slabost: Ni primerna za konkreten vnos, ter za ljudi.


Evalvacija izrazov

 (računanje vrednosti)

Evalvacija je relacija:

       e <--> n, kjer je e izraz, <--> relacija in n število
       Beremo: "izraz se evalvira v n"
Osebna orodja