Compiler/fortolker struktur Mellem- kode Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse if viggo == 3 then....

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

C++ for Java-programmerere
Kompilatorer - Hva foregår under panseret? BEKK fagdag
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Kontrollstrukturer (Kapittel 3)
Uke 8 - Mer om: Objekter, klasser og pekere
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
ADA 95 – del6 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes.
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
C for Java-programmerere
Eiendomregister mars 2002 Arne Maus. import java.util.*; import inf101.*; /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain.
Databasehåndtering med MySQL
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Krasjkurs i C (pluss litt matlab)
En gang til!? .
Filer Finne minste Finne Største Beregne gjennomsnitt Variabler Tabeller – Arrays Lage frekvenstabell.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 4.9 Forrige gang til og med: 3.2 Visual Basic Events (60-73) Nå: Litt om Group Box, CheckBox.
PHP oversikt. Basis egenskaper Grensesnitt med web tjener Skripttaggene Kommentartegn Ikke case sensitiv Avslutningstegn for instruksjoner.
Design Patterns Iterator & Mediator. Gruppe 8 Presentasjonsgruppe:Resten av gruppen: Marianne AtesAndrè Johansen Tom Vidar LundeHege-Kristin Johansen.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
std::basic_string En oversikt over C++ Standard bibliotekets streng-klasse.
ADA 95 – del3 Foreleser: Olaf Hallan Graven Bok: Programming in ADA95 (2nd) John Barnes.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 3 Mer om uttrykk Terminal I/O Forgreninger
Java 11 Programmering med og uten objekter: hva er forskjellen?
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
1 Kap 06 Ordnede / Sorterte lister Oppgave nr 06_02 Polynomer Klassehierarki Javadokumentasjon.
Oppgaver til kodegenerering etc. INF-5110, 2013 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet,
DComNet1 ISA-niveauet (2). dComNet2 Niveauer af virtuelle maskiner ISA niveauet / maskinkodeniveauet / maskinniveau.
02 - Java datatyper Grundlæggende om datatyper og variable.
1 Pointere, referencer, struct’s mv.. 2 Erklæringer Eksempel på erklæringer int i, *ip, f ( ), *fip( ), (*pfi) ( ); Erklærer en integer, en pointer til.
1 INF5110 – 23. april, 2013 Svar på noen oppgaver til kap. 8 Beklager noe trykkfeil og rot på forelesningene Håper dette er bedre (lagt ut 24/4) Nå fredag.
INF2820 Datalingvistikk – V2012
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Redusere kompleksitet i Entity Framework spørringer Skrevet av Tore Aurstad,
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
INF1000 (Uke 13) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Nytt fra Utdanningsforbundet Utdanningsforbundet Bergen Bergen.
Indledende Datalogi /kelk 1 Need to know Løkker Klasser, instanser og Objekter Hvorfor objektorientering? Scope – hvor erklæres en variabel? ”Access Modifiers”
INF Objektorientert programmering
Astri Helene Engerdahl Ny Giv Gjennomføring i videregående opplæring.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
1 Input og output mv.. 2 printf int printf(char *format, arg1, arg2, …, argn) returnerer antal udskrevne tegn Format indeholder to typer objekter: almindelige.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Kapittel 5 Vilkårssetningar og løkker. 5.1 Boolske uttrykk George Boole ( ), britisk matematikar Utvikla teori om logikk ved bruk av symbol i.
Oversikt Access Hva en bør beherske så langt. Tabeller Felt Typer (heltall, desimaltall, tekst, Boolean) Primary Key.
IS-102 Interaksjon med objekter
Spillutvikling Introduksjon til spillutvikling i Processing
Yet Another Compiler Compiler
Ә.Тәжібаев “Сырдария ” өлеңі ашық сабақ 7-сынып
INF2820 Datalingvistikk – V2015
BilSalg klassedatastruktur Bil klassedatastruktur
Жоба «Сын тұрғысынан ойлау технологиясы арқылы оқушылардың
Қарсылықты бағыныңқы сабақтас
Екпетал мектеп – балабақшасы Ана тілі 2 класс Өткізген: Г
Ашық сабақ Тақырыбы: Отан туралы М.Мақатаев
“Сыни тұрғыдан ойлауға оқыту” модулі сабақтар топтамасында орындаған: бастауыш сынып мұғалімі:Алимбаева Алмаш Иренгалиевна санаты ІІ.
BilSalg klassedatastruktur Bil klassedatastruktur
Siste uke med fokus på Python  Java
Коучинг тақырыбы: “Оқыту мен оқудағы жаңа әдіс-тәсілдер”
Utskrift av presentasjonen:

Compiler/fortolker struktur Mellem- kode Kode- generering Kode- optimering Lexikalsk- analyse Syntax- analyse Semantik- analyse if viggo == 3 then.... If token Ident token Front end

Leksikalsk analyse. Leksikalsk- analyse Syntax- analyse Strukturanalyse af sproget Strukturanalyse er baseret på grammatik, hvor de enkelte blade i parsertræet er de enkelte tegn i alfabetet. statement -> ident ’=’ exp ’;’... ident -> letter tegnlist tegnlist ->  | tegnlist tegn tegn -> letter | digit letter -> ’a’|’b’|’c’|......|’A’|’B’|’C’|...|’Å’ digit -> ’0’|’1’|’2’|’3’|’4’|’5’.... Regulær grammatik Context-free grammatik

Leksikalsk analyse Opgave: Opdel sproget i leksikalske enheder (ord) der kan beskriver vha. regulær grammatik. Fx: if then else void -1.34e-5 Variabel_1. Gemme stavemåde for IdT og værdi for fx RealT.

Ad hoc lekser. int yylval; char ch; struct symnote *lookup(char *s); struct symnote *insert_sym(char *s); char yytext[80]; void lex_init() {ch = getchar();} main() { struct symnote *sptr; init_sym(); sptr = insert_sym(”IF"); sptr->type = ifT; sptr = insert_sym(”THEN"); sptr->type = thenT; sptr = insert_sym(”ELSE"); sptr->type = elseT; lex_init(); yylex(); }

Symboltabel struct symnote { char *name; int type; double value; void *address; char used; char assigned; }; struct symnote *symboltabel[TABSIZE];

Ad hoc lekser. int yylex() { struct symnote *sptr; int i; switch (ch) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { yylval = ch - '0'; while (isdigit(ch = getchar())) yylval = yylval * 10 + ch - '0'; return intT; }

Ad hoc lekser. case 'A': case 'B': case 'C': case 'D':. case 'Z': { i = 0; yytext[i] = ch; while (isupper(ch = getchar())) { yytext[++i] = ch; } yytext[++i] = '\0'; sptr = lookup(yytext); if (sptr != NULL) { return sptr->type; } return IdT; }

Ad hoc lekser. case ' ': case '\n': case '\t': ch = getchar(); return yylex(); case '+': ch = getchar(); return addT; case '=': ch = getchar(); return eqT; default: ch = getchar(); return unknownT; }

Endelige automater. Den rigtige metode FSM. [a-z]([a-z]|[0-9]|_)* [a-z] s2 [a-z] s1 [ 0-9 ] _

Simpel float udtryk: -?[0-9]+(\.[0-9]+)? digit s2 s3 s4 s5 s1 s2 s3 s4 s s5 x x x x | ’-’ x s3 x x s3| ’.’ s2 s2 s4 s4 s2| ’0’ s2 s2 s4 s4 s2| ’1’ | ’2’ Slutbetingelse: FSA befinder sig i en sluttilstand og næste tegn giver X ved opslag. Fejlbetingelse: FSA befinder sig ikke i en sluttilstand og næste tegn giver X ved opslag. digit s1

C-program. // s1 s2 s3 s4 s5 char state[12][5]= {(s5,-1,-1,-1,-1), // - (-1,s3,-1,-1,s3), //. (s2,s2,s4,s4,s2), // 0 (s2,s2,s4,s4,s2), // 1 (s2,s2,s4,s4,s2), // 2 (s2,s2,s4,s4,s2), // 3 (s2,s2,s4,s4,s2), // 4 (s2,s2,s4,s4,s2), // 5 (s2,s2,s4,s4,s2), // 6 (s2,s2,s4,s4,s2), // 7 (s2,s2,s4,s4,s2), // 8 (s2,s2,s4,s4,s2)}; // 9 char Oldstate= s1, Cstate= s1; char ch= getnextch(); while (ch =! eof) { Cstate = state[ch][Cstate]; ch= getnextch(); if (Cstate < 0) { if ((Oldstate == s2)|| (Oldstate == s4)) break; else{cout << ”Parser fejl” << endl; exit(0);} } Oldstate= Cstate; } cout << "Parsning OK!" << endl;

lex/flex Et værktøj til opbygning af leksikalsk analyse ud fra regulær grammatik Lex Fo.l lex.yy.c int yylex(); char *yytext: int yylval; int yyleng; FILE *yyin= stdin; Regulær grammatik samt div.

Lex filen: fo.l %{ pre C kode fx #include, #define og var. erklæring. }% Definitioner % Regler % Subroutiner xyzStrengen ’’xyz’’ x|ystrengen x eller y [0-9]Et tegn mellem 0 og 9 x*nul eller flere x x+Et elle flere x x?Valgfrit x ^xx som første tegn på en linie. x$x som sidste tegn på en linie. x/yx men kun hvis det efterfølges af et y (xy)Gruppering.Alle tegn undtagen newline [^x]Komplementærmængden til x -?(([0-9]+)|([0-9]*\.[0-9]+))([eE][-+]?[0-9]+)?

Simpel: WC %{ int chnr= 0, ordnr= 0, lnr= 0; %} Ord [^ \t\n]+ % {ord} {ordnr++; chnr+=yyleng;} \n {chnr++; lnr++;}. {chnr++;} % int main(){ yylex(); printf("ant.linier: %d, ant.ord: %d, ant.tegn: %d\n", lnr,ordnr,chnr); } > lex wc.l > gcc lex.yy.c –ll –o wc

%{ #include #include "symtab.h" #include "rpd.h" %} variabelnavn [a-zA-Z][a-zA-Z0-9]* % begin {return beginT;} end {return endT;} int {return intT;} float {return floatT;} program {return programT;} {variabelnavn} {if ((yylval.symptr= lookup_sym(yytext)) == NULL) yylval.symptr= insert_sym(yytext); return idT;} [ \t\n] ;. {return yytext[0];} %

Kædet hash tabel ptr pt NULL Index= hash(name); symbolrray name pt name pt name pt name pt name pt name pt name

void init_sym() {int i; for (i = 0; i < HASHSIZE; i++) symbolarray[i] = NULL; } struct symnote *lookup_sym(char *name) {struct symnote *ptr; int index = hash(name); ptr = symbolarray[index]; while ((ptr != NULL) && (strcmp(ptr->name, name) != 0)) ptr = ptr->pt; return ptr; } struct symnote *insert_sym(char *name) {struct symnote *ptr; int index = hash(name); ptr= (struct symnote *)malloc(sizeof(struct symnote)); ptr->pt= symbolarray[index]; symbolarray[index] = ptr; ptr->name = strdup(name); return ptr; }