Omgevingen zijn dan geïmplementeerd als Symbol Tables.

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.

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

Transcript of Omgevingen zijn dan geïmplementeerd als Symbol Tables.

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