Opleiding INFORMATICA Programmeertaal Implementatie Taal ontwerp Vertalen
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 2 Componenten Programmeertaal naar eigen ontwerp Vertaler naar objectstructuur Codegenerator vanuit objectstructuur Java assembler “jasmin” Java Virtuele Machine Simulator “jvmsim” Java Virtuele Machine “java”
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 3 Taal ontwerpen Syntax en semantiek –Structuur in grammatica beschrijven –Betekenis ligt in semantiek Data(structuren), variabelen, typen –Namen –Geheugenplaats –Scope, name space –Waardenbereik –Structuur (arrays, records, class, object)
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 4 Taal ontwerpen Expressies –Te evalueren tot een waarde van een type –“berekening” –Functie Statements –Basis (o.a. assignment) –Iteratief –Conditioneel –Procedure –Block Abstractie Onderscheid Definitie en Gebruik (def versus use)
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 5 Type talen Imperatieve talen –Assignment is cruciaal (eigen geheigenbeheer) –Pascal, C, Fortran Functionele talen –Functie wordt als basiselement behandeld –Expressies, geen assignments –Functiedefinities –Haskel, Miranda, Lisp Object georienteerde talen –Class als definitie van object met bundeling van data en methoden in een structuur –Data hiding –Overerving –C++, Java, Python
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 6 Type talen Logisch etalen –Proposities en predicaten centraal –Prolog Concurrente talen –Proces centraal –Synchronisatie –Communicatie –CSP en verder vaak libraries
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 7 Vertalen versus vertolken Vertalen = Compileren : transformatie van programma naar semantisch equivalente code Vertolken = interpreteren: uitvoeren van programnma als uitvoerbare code
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 8 Fasen in opdracht Eigen programmeertaal ontwerpen –basistypen: integer, boolean, character –eendimensionale arrays van elk basistype –controlestructuren: opeenvolging keuze herhaling –expressies van elk basistype –procedures en functies met parameters
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 9 Taak compiler Scanner Parser Codegeneratie van objecten die programmatekst representeren Checks op –type van expressies en variabelen stemmen overeen met de context van het gebruik –arraygrenzen –aantal en type van parameters stemmen overeen in definitie en gebruik Codegeneratie vanuit gegenereerde objectstructuur voor de java-assembler “jasmin”
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 10 Hulpmiddelen Scannergenerator “Jlex” Parsergenerator “Cup” Object georiënteerde programmeertaal Java Assembler “jasmin” Visualisator van Java Virtuele Machine “jvmsim” Java Virtuele machine “java”
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 11 Fasen YLA tok C YLAtoktok objobj C/C++ PPP obj jasm C++ objjasmjasm bcbc Java PPP De groene transformators (I, II en III) worden in het practicum gebouwd III III
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 12 Bekende knelpunten Integratie van door Jlex en Cup gegenereerde Java-code met eigen code Generatie van de objectstructuur –ontwerpen van classes voor taalelementen –specificeren van objectcreatie binnen de grammaticaregels in de Cupfile –doorgeven van parameters in de creatie van objecten –Kortom: welke classes, wanneer creëren, welke parameters?
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 13 Genereren objectstructuur Voorbeeld expressie:: expressie PLUS term | term ; term:: term MAAL factor | factor ; factor:: NUMBER | MINUS factor | LHAAK expressie RHAAK ; Welke classes? Bijv. abstracte class Expr met subclasses Nullaire_expr, Unaire_expr en Binaire_expr
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 14 Classes Class Expr { } Class Nullaire_expr : public Expr { int number; public: Nullaire_expr(int num) {number = num;} } Class Unaire_expr : public Expr { int operator; Expr: expr; public: Unaire_expr(int op; Expr expr) {...} } Class Binaire_expr : public Expr { int operator; Expr: expr; public: Binaire_expr(Expr e1;int op; Expr e2) {...} }
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 15 Op welke punten objecten creëren? Voorbeeld expressie:: expressie PLUS term { creëer Binaire_expr } | term {doorgeven attribuut } ; term:: term MAAL factor {creëer Binaire_expr } | factor {doorgeven attribuut} ; factor:: NUMBER {creëer Nullaire-expr} | MINUS factor (creëer Unaire_expr } | LHAAK expressie RHAAK {geef attribuut door } ;
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 16 Creatie en doorgeven in pseudo Java Voorbeeld expressie::= expressie:e PLUS term:t { RESULT = new Binaire_expr (e, PLUS, t);} | term:t {RESULT = t;} ; term:: term:t MAAL factor:f {RESULT = new Binaire_expr (t, MAAL, f);} | factor:f {RESULT = f;} ; factor:: NUMBER:n {RESULT= new Nullaire_expr (n);} | MINUS factor:f {RESULT = new Unaire_expr (MINUS,f)}; }| LHAAK expressie:e RHAAK {RESULT = e; } ;
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 17 Type van attributen In de Cup specificatiefile geven we bij de nonterminalen en eventueel terminalen aan van welk type hun attribuut is. In het geval van het voorbeeld moet bekend zijn: expressieExpr termExpr factorExpr Zorg voor een goede overdracht van attributen voor terminalen vanuit de door Jlex gespecificeerde scanner naar de parser
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 18 Vraag Tot welke objectstructuur wordt de volgende expressie omgezet? (3 + ((3 * 7 + 4) * 2)) + 5
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 19 Java Virtuele Machine Kleine nul-adres machine Instructieset Stack voor datamanipulatie (32 bits) Heap met garbage collection Constant Pool Interne registers –program counter –stackpointer –framepointer –pointer naar variabelen op de stack Method area
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 20 Instructieset uitgebreid instructies voor berekeningen, het halen uit en opbergen in geheugen zijn getypeerd Bijv. optellen add is er als iadd, ladd, fadd etc. ondersteunt object orientatie door te werken met objecten in de heap en referenties naar objecten op de stack door new-instructie door instructies om bij instantie- en classvariabelen te komen
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 21 Stack FrameFrame Execution environment lvar-0 lvar-1 lvar-n opval-1 opval-2 optop frame vars
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 22 Instructie iadd Execution environment optop frame vars 7 3 Execution environment optop frame vars 10 voorna ref-this
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 23 Instructie iload 2 Execution environment optop frame vars 7 Execution environment optop frame vars voorna ref-this
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 24 Instructie istore 1 Execution environment optop frame vars 7 Execution environment optop frame vars voorna ref-this
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 25 Instructie bipush 3 Execution environment optop frame vars 7 Execution environment optop frame vars voorna ref-this
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 26 Instructie dup Execution environment optop frame vars 7 Execution environment optop frame vars voorna ref-this
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 27 Instructie pop Execution environment optop frame vars 7 Execution environment optop frame vars voorna ref-this
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 28 Instructie swap Execution environment optop frame vars 7 Execution environment optop frame vars voorna ref-this
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 29 Instructie iaload Execution environment optop frame vars array-ref van rij Execution environment optop frame vars voorna ref-this waarde van rij[3]
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 30 Instructie iastore Execution environment optop frame vars array-ref van rij Execution environment optop frame vars voorna ref-this
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 31 Instructie newarray int Execution environment optop frame vars 7 Execution environment optop frame vars voorna ref-this Nieuwe arrayref
Opleiding INFORMATICA ©CII Saxion Hogeschool Enschede 32 Nog meer instructies Er zijn nog enkele categorieen instructies Control flow: Zie artikel “Under the Hood: Control flow” en teken zelf een aantal voorbeelden uit. Het effect is enerzijds zichtbaar op de stack: waarden worden gepopt. Het tweede effect zit in een eventuele wijziging sprongopdracht: wijziging van de waarde van de pc. Converteren van datatypes Aanroepen van methoden Zie hiervoor de uitgebreide opdrachtsomschrijving