10b. Expressieboom

2021-03-12
slides.com/jod/pt_10b

Docent: Jo Devriendt

Assistent: Ann Philips

Coördinator: Joost Vennekens

voornaam.achternaam@kuleuven.be

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Expressiebomen

Veel taal-expressies hebben een onderliggende boomstructuur, ook wel abstract syntax tree genoemd

geeft aan

Archibald

wisselgeld

en

de bakker

hem

koopt

een brood

||
!
=
int x
z
y

Nodig om ambiguïteit te voorkomen:

int x = !y||z     <->    int x = !(y||z)

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Binaire expressieboom

*
3

+

1
8
typedef struct node {
  char operatie;
  int waarde;
  struct node* links;
  struct node* rechts;
} Node;

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Door de boom wandelen

*
3

+

1
8
  • inorder
    • links -> node -> rechts
    • 1+3*8
  • preorder
    • node -> links -> rechts
    • +1*38
  • postorder
    • links -> rechts -> node
    • 138*+

Betekenis van expressie verandert niet!

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Door de boom lopen

typedef struct node {
  char operatie;
  int waarde;
  struct node* links;
  struct node* rechts;
} Node;

void print(Node* n){
  if(operatie!='0'){
    printf("%c",operatie);
  }else{
    printf("%d",waarde);
  }
}
void inorder(Node* n){
  if(n!=NULL){
    inorder(n->links);
    print(n);
    inorder(n->rechts);
  }
}
void preorder(Node* n){
  if(n!=NULL){
    print(n);
    preorder(n->links);
    preorder(n->rechts);
  }
}
void postorder(Node* n){
  if(n!=NULL){
    postorder(n->links);
    postorder(n->rechts);
    print(n);
  }
}

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Oefeningen

  • Schrijf code die de uiteindelijk waarde van zo'n aritmetische binaire expressieboom berekent. Lukt het met elke manier om door de boom te lopen? Welke manier lijkt het handigst?
  • Wat als je de unaire operatie 'min' (bvb. -7) toelaat?

Programmeertechnieken [B-KUL-YI0855]

De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021

Samenvatting

  • Expressiebomen tonen onderliggende structuur aan van expressies
  • Binaire bomen worden typisch op 3 manieren doorlopen:
    • inorder
    • preorder
    • postorder