21
• Omgevingen zijn dan geïmplementeerd als Symbol Tables. • Symbol Table mapt een symbool met een Binding • Meerdere noties van binding – Meerdere manieren te gebruiken door de compiler. – Type voor types, value voor variables. • In 1 table -> 1 gebruik.

Omgevingen zijn dan geïmplementeerd als Symbol Tables

  • Upload
    alain

  • View
    52

  • Download
    0

Embed Size (px)

DESCRIPTION

Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding Meerdere manieren te gebruiken door de compiler. Type voor types, value voor variables. In 1 table -> 1 gebruik. package Symbol; public Class Symbol{ - PowerPoint PPT Presentation

Citation preview

Page 1: Omgevingen zijn dan geïmplementeerd als Symbol Tables

• Omgevingen zijn dan geïmplementeerd als Symbol Tables.

• Symbol Table mapt een symbool met een Binding

• Meerdere noties van binding– Meerdere manieren te gebruiken door de

compiler.– Type voor types, value voor variables.

• In 1 table -> 1 gebruik.

Page 2: Omgevingen zijn dan geïmplementeerd als Symbol Tables

CODE SLIDE AUB package Symbol;

public Class Symbol{

public String tostring();

public static Symbol symbol(string s);

}

public class Table{

public Table();

public void put(Symbol key,Object value);

public Object get(Symbol Key);

public void beginscope();

public void endscope();

public java.util.Enumeration keys();

}

Page 3: Omgevingen zijn dan geïmplementeerd als Symbol Tables

Symbool Implementatie

• In java : java.lang.String maakt van elke string een uniek object.

• Symbool -> String : elk symbool bevat een string.

• String -> Symbool : Moet via een hast-tabel. (java.util.hashtable)

Page 4: Omgevingen zijn dan geïmplementeerd als Symbol Tables

CODE SLIDE AUB package Symbol;

public Class Symbol{

public String tostring();

public static Symbol symbol(string s);

}

public class Table{

public Table();

public void put(Symbol key,Object value);

public Object get(Symbol Key);

public void beginscope();

public void endscope();

public java.util.Enumeration keys();

}

Page 5: Omgevingen zijn dan geïmplementeerd als Symbol Tables

.

• beginscope()– Onthoudt de huidige omgeving van de tabel.

• endscope()– Zet de tabel terug in de staat van de meest

recente, niet geëindigde beginscope().

• Dienen voor als een omgeving beëindigt wordt gedane veranderingen ongedaan maken.

Page 6: Omgevingen zijn dan geïmplementeerd als Symbol Tables

CODE SLIDE AUB package Symbol;

public Class Symbol{

public String tostring();

public static Symbol symbol(string s);

}

public class Table{

public Table();

public void put(Symbol key,Object value);

public Object get(Symbol Key);

public void beginscope();

public void endscope();

public java.util.Enumeration keys();

}

Page 7: Omgevingen zijn dan geïmplementeerd als Symbol Tables

Symbool tables voor imperatieve tables

• X -> b toevoegen.

• X wordt gehashed tot index i.

• Er wordt een Binder Object X -> b aangemaakt.

• X -> b’ wordt niet overschreven maar is niet meer bereikbaar in huidige omgeving.

Page 8: Omgevingen zijn dan geïmplementeerd als Symbol Tables

• Nood aan een stack.

• Wat wordt er op stack gegooid ?– X indien X -> b wordt toegevoegd.– Speciaal Teken als beginscope() wordt

uitgevoerd.

• Bij endscope() worden alles uit de stack tot aan het speciale teken verwijdert en uit de symbool table gehaald.

Page 9: Omgevingen zijn dan geïmplementeerd als Symbol Tables

5.2 Type checking.

• Wat zetten we in de tables?

• Welke bindings gebruiken ?– Variabelen en formele parameters -> type– Methodes -> Parameters, resultaats type &

lokale variabelen– Klassen -> Methodes en variabelen declaraties

Page 10: Omgevingen zijn dan geïmplementeerd als Symbol Tables
Page 11: Omgevingen zijn dan geïmplementeerd als Symbol Tables

2 fasen.

• De symbool Tabel opmaken.• Type-check alle statements en expressies.

– Tijdens fase 2 : voor elke identifier token wordt de tabel geraadpleegd.

2 fasen nodig omdat de oproep van een methode kan voorkomen voor de declaratie van een methode.

Page 12: Omgevingen zijn dan geïmplementeerd als Symbol Tables

1e fase

• Dit kan geïmplementeerd worden via een visitor.

• De visitor bezoekt elke node in de abstract syntax tree en bouwt de symbool tabel op.– Voeg voor elke variabele naam en type toe.– Elke variabele maar 1 maal per omgeving

gedeclareert.

Page 13: Omgevingen zijn dan geïmplementeerd als Symbol Tables

.// VarDecl -> Type id ;// Type t// Identifier ipublic void visit(VarDecl n) {

Type t = n.t.accept(this)Symbol id = Symbol.symbol(n.i.toString());bool result;if (currMethod == null) /* in klasse */

result = currClass.addVar(id,t);else /* in methode */

result = currMethod.addVar(id,t);if (!result)error.complain(id.toString() + “ is already defined”);

Page 14: Omgevingen zijn dan geïmplementeerd als Symbol Tables

2e fase

• Visitor checkt voor expressie en statement het type.

• Visitor returnt het type van de expressie.

• Visitor returnt een error message.

Page 15: Omgevingen zijn dan geïmplementeerd als Symbol Tables

// Exp e1, e2;public Type visit(Plus n) {

if (! (n.e1.accept(this) instanceof IntegerType) )error.complain(“Left side of Plus must be integer”);

if (! (n.e2.accept(this) instanceof IntegerType) )error.complain(“Right side of Plus must be integer”);

return new IntegerType();}

• Beide operanden van n moeten integers zijn.• Return type zal ook integer zijn.

Page 16: Omgevingen zijn dan geïmplementeerd als Symbol Tables

Overloading.

• Som van 2 integers is een integer.

• Integer + Real ??

• In meeste talen wordt impliciet de int omgezet naar een real.

• Dit moet later ook expliciet worden gemaakt door de compiler in de code die hij genereert.

Page 17: Omgevingen zijn dan geïmplementeerd als Symbol Tables

Toekenningen.

• Left hand side moet het zelfde type hebben als de right hand side.

• Bij overerving of extensies moet het rechtse type een subtype zijn van het linkse type.– Person p = new Woman();

Page 18: Omgevingen zijn dan geïmplementeerd als Symbol Tables

Method calls.

Bv : C e = new C();

e.m( int i);-> e heeft type C.

-> definitie van m opgezocht in classe C.

-> parameter types gematcht met de formele argument types.

-> result type = return type van de methode.

Page 19: Omgevingen zijn dan geïmplementeerd als Symbol Tables

Error handling.

• Bij een error moet een error message geprint worden met aard en locatie van de fout. int i = new String();

Error Illegal …. Line 1….

• i moet toch in tabel worden opgenomen voor verdere fouten na te gaan.

Page 20: Omgevingen zijn dan geïmplementeerd als Symbol Tables

Error handling.

• Compiler mag geen foute output code geven bij een type check error.– Latere fases van compilatie moeten opgeschort

worden.– Alle (niet-logische) fouten in code moeten voor

of tijdens de semantische analyse gevonden worden.

– Tot zover de analyse fase.

Page 21: Omgevingen zijn dan geïmplementeerd als Symbol Tables

Einde Analyse

Einde Les 3