1 / 21

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. package Symbol; public Class Symbol{

alain
Download Presentation

Omgevingen zijn dan geïmplementeerd als Symbol Tables.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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.

  2. 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(); } CODE SLIDE AUB 

  3. 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)

  4. 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(); } CODE SLIDE AUB 

  5. . • 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.

  6. 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(); } CODE SLIDE AUB 

  7. 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.

  8. 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.

  9. 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

  10. 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.

  11. 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.

  12. . // VarDecl -> Type id ; // Type t // Identifier i public 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”);

  13. 2e fase • Visitor checkt voor expressie en statement het type. • Visitor returnt het type van de expressie. • Visitor returnt een error message.

  14. // 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.

  15. 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.

  16. 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();

  17. 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.

  18. 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.

  19. 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.

  20. Einde AnalyseEinde Les 3

More Related