Administrivia INF 3110/ INF /02/2005 1

Like dokumenter
Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Anatomien til en kompilator - I

Skanning del I INF /01/15 1

Hjemmeeksamen 2 i INF3110/4110

Scanning - I Kap. 2. Hva scanneren gjør

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Typisk: Kan det være både nøkkelord og navn, så skal det ansees som nøkkelord

Kapittel 1 En oversikt over C-språket

Skanning del I. Kapittel 2 INF 3110/ INF

Anatomien til en kompilator - I

Del 1 En oversikt over C-programmering

Del 3: Evaluere uttrykk

IN 147 Program og maskinvare

Oversikt. Praktisk. Litt om meg. Obligatorisk oppgave 1 - Kort om oppgaven og verktøyene. Fredrik Sørensen OMS-gruppen, IfI.

Oving 2. Oppgave 1. #include <stdio.h> int main(int argc, char **argv) { char *navn = argv[1]; printf ("Navnet ditt er %s\n", navn); } Oppgave 2

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Programmeringsspråket C

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

Obligatorisk Oppgave 1

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

Dagens tema INF1070. Info om C. Cs preprosessor. Feilsøking. Dag Langmyhr,Ifi,UiO: Forelesning 31. januar 2005 Ark 1 av 29

Informasjon om C. Dagens tema INF1070 INF1070 INF1070 INF1070. Den viktigste kilden til informasjon om C (utenom en god. C-funksjonene.

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

UNIVERSITETET I OSLO

Cs preprosessor. Dagens tema. Betinget kompilering

INF2100. Oppgaver 23. og 24. september 2010

Oversikt. INF5110 Obligatorisk Oppgave 1. Andreas Svendsen SINTEF

Hvor er vi nå - kap. 3 (+4,5)? Forenklet skisse av hva en parser gjør PARSER. Kontekstfrie grammatikker og syntaksanalyse (parsering)

INF Oblig 2 semantikksjekk og kodegenerering

UNIVERSITETET I OSLO

Velkommen til INF Kompilatorteknikk

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Syntax/semantics - I INF 3110/ /29/2005 1

NKKN typeforslag versjon Definisjon av grunntypene

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF april, 2013 Kap. 8 Noen oppgaver som er meget relevante for Oblig 2

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

Obligatorisk oppgave 1 INF Kompilatorteknikk Våren 2012 Frist mandag 19. mars

Med Svarforslag UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet. 3 sider (side 6, 7 og 8, rives ut, fylles ut og leveres)

Velkommen til INF Kompilatorteknikk

Kap.4, del 2: Top Down Parsering Kap. 5, del 1: Bottom Up Parsing INF5110, 7/ Legger ut en oppgave til kap. 4 (se beskjed).

Obligatorisk Oppgave 1

Betinget eksekvering og logiske tester i shell

Del 4 Noen spesielle C-elementer

Dagens tema: Sjekking

Semantisk Analyse del I

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

Velkommen til INF Kompilatorteknikk

INF2100. Oppgaver uke 40 og

INF 5110, 3. februar Dette foilheftet: Kapittel 3

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

INF5110, 15/ Dagens temaer: Avslutning kap. 4 Begynne på kap. 5 Se på oppgave. Stein Krogdahl, Ifi UiO

Kap. 4: Ovenfra-ned (top-down) parsering

Dagens tema. Oppsummering om assemblerspråk. Programmering i C. Bakgrunn. Et minimalt eksempel med forklaring. Datatyper i C.

Hva er datamaskinarkitektur?

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Repetisjon fra sist - 1: Plan for dagen. Repetisjon fra sist 2: Hva jeg glemte sist: Nyttige Kommandoer

Dagens Tema: Grammatikker

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

INF2100. Oppgaver 26. september til 1. oktober 2007

Dagens tema: Mer av det dere trenger til del 1

INF januar Forelesninger fremover:

Kap.4 del I Top Down Parsering INF5110 v2005. Arne Maus Ifi, UiO

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Skal bindes opp til en deklarasjon av samme navn

Statisk semantisk analyse - Kap. 6 Foiler ved Birger Møller-Pedersen (Forelest 10/3 og 12/ av Stein Krogdahl)

INF 1000 høsten 2011 Uke september

Kontekstfrie grammatikker og syntaksanalyse (parsering)

Velkommen til INF Kompilatorteknikk

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

MAT1030 Diskret matematikk

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Forelesning inf Java 5

Forelesning inf Java 5

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Programmeringsspråket C

OPPGAVE 5b og 8b Java Kode

INF 1010, vår 2005 Løsningsforslag uke 11

Diverse eksamensgaver

INF2820 Datalingvistikk V2016. Jan Tore Lønning

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Hovedstoffet i kap 4: 16. Februar Ifi, UiO

Dagens tema. Cs preprosessor Separat kompilering av C-funksjoner C og minnet Oversikt over operatorene

Programmeringsspråket C

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

Løsningsforslag Øving 7

Generiske mekanismer i statisk typede programmeringsspråk

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

Skal bindes opp til en deklarasjon av samme navn

Transkript:

Administrivia Arild Fines Studentassistent for INF5110 Tok INF5110 våren 2004 Ingen tradisjonelle gruppetimer Veiledning over epost og/eller ved treffetid arild.fines@broadpark.no 03/02/2005 1

Lex/Flex Automatisk generering av scannere INF 5110-2005 03/02/2005 Institutt for informatikk 2

Hva er lex? Lex er en scanner generator En scanner gjør om en tekstfil til en strøm av tokens Lex er ikke en scanner i seg selv Lex genererer C kode som utfører scanningen C-koden må kompileres og linkes på normalt vis Lex brukes ofte med en parser generator, som oftest yacc/bison Lex ble originalt skrevet som en partner til yacc 03/02/2005 3

Hva er flex? Lex er standard på kommersielle unix-systemer Lex er påkrevd av Posix-standarden Lex er ikke åpen kildekode Flex er et gratis alternativ til lex Alt i denne forelesningen gjelder både for lex og flex 03/02/2005 4

Hvordan brukes lex? Brukeren setter opp regler for hvordan de forskjellige tokens ser ut i en tekstfil Denne filen har tradisjonelt filendingen.l Denne filen blir så konvertert til C-kode av lex flex o lexer.c lexer.l C-koden kompileres og linkes med resten av kompilatoren på normalt vis 03/02/2005 5

Lex-filer Strukturen er som følger: definitions %% rules %% code definitions inneholder deklarasjoner av gjenbrukbare regulære uttrykk DIGIT [0-9] ID [a-z][a-z0-9]* Kan også inneholde blokker med #include statements %{ #include yytab.h %} 03/02/2005 6

Lex-filer(forts) rules er den viktigste delen Inneholder regulære uttrykk og C-kode som utføres når disse uttrykkene matches C-koden brukes ofte til å kommunisere med parseren(yacc) Eks: "false" { return FALSE; } "true" { return TRUE; } {letter}({letter} {digit}){0,15} { yylval.text = strdup(yytext); return NAME; } Dersom det ikke er noen action blir tokenet forkastet code -seksjonen er for hjelperutiner og en evt main() funksjon 03/02/2005 7

Eksempel(stjålet fra flex-manualen) %{ #include <math.h> %} DIGIT [0-9] ID [a-z][a-z0-9]* %% {DIGIT}+ { printf( "An integer: %s (%d)\n", yytext, atoi( yytext ) ); } {DIGIT}+"."{DIGIT}* { printf( "A float: %s (%g)\n", yytext, atof( yytext ) ); } if then begin end { printf( "A keyword: %s\n", yytext ); } {ID} printf( "An identifier: %s\n", yytext ); %% int main( int argc, char** argv) { yyin = fopen( argv[1], r ); yylex(); } 03/02/2005 8

Implementasjon Brukeren definerer et sett med regulære definisjoner Og tilhørende aksjoner som utføres når en definisjon blir matchet Lex gjør om disse til NFA-er Disse kombineres til én stor NFA Gjerne ved bruk av Thompson-konstruksjon Denne konverteres til en DFA ved bruk av subset construction Lex generer så C-kode som implementerer denne DFAen DFAen er vanligvis tabell-drevet Den genererte C-koden er gjerne stygg Har ikke så mye å si man skal ikke redigere denne direkte Så lenge C-kompilatoren skjønner den, er alt bra 03/02/2005 9

Generert kode switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yy_hold_char; yy_cp = yy_last_accepting_cpos; yy_current_state = yy_last_accepting_state; goto yy_find_action; case 1: YY_RULE_SETUP #line 21 "lexer.l" { yylval.real = atof( yytext ); return NUMBER; } YY_BREAK case 2: YY_RULE_SETUP #line 22 "lexer.l" { return REAL; } YY_BREAK case 3: YY_RULE_SETUP #line 23 "lexer.l" { return BOOL; } YY_BREAK case 4: YY_RULE_SETUP #line 24 "lexer.l" { return PROC; } 03/02/2005 10

Mer generert kode static yyconst short int yy_chk[176] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 15, 23, 15, 15, 25, 25, 26, 29, 23, 32, 38, 38, 58, 138, 26, 32, 39, 29, 39, 39, 57, 64, 64, 57, 75, 105, 106, 58, 75, 105, 106, 124, 137, 124, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 123, 102, 99, 98, 96, 92, 88, 87, 86, 83, 81, 80, 79, 78, 77, 76, 74, 72, 71, 70, 69, 68, 62, 61, 60, 59, 54, 51, 50, 49, 47, 46, 45, 42, 35, 34, 33, 31, 30, 28, 27, 24, 22, 20, 19, 18, 16, 14, 12, 9, 5, 3, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; 03/02/2005 11

Bruk av lex med yacc Lex ble designet til å fungere bra sammen med yacc Yacc kaller yylex() hver gang den trenger et nytt token Lex definerer yylex(): Finner en rule som matcher input Utfører en action assosiert med den regelen: "if" { return IF; } Yacc definerer også en global variabel yylval som kan brukes til å formidle ytterligere informasjon: {real} { yylval.real = atof( yytext ); return NUMBER; } 03/02/2005 12

Lex og yacc(forts) Man kan bruke opsjonen d til yacc/bison for å generere en header fil med alle %tokens i Yacc-fila I parser.y: %token PLUSOP MINUSOP MULTOP DIVIDEOP POWEROP ASSIGN %token OR AND NOT LT LTEQ GT GTEQ NOTEQ EQ I lexer.l: %{ #include y.tab.h %} //... "=" { return EQ; } "+" { return PLUSOP; } "-" { return MINUSOP; } 03/02/2005 13

Spyrgesmål? INF 5110-2005 03/02/2005 Institutt for informatikk 14