Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract



Relaterede dokumenter
Sproget Rascal (v. 2)

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

En oversætter for 100

Yderligere udvidelser af oversætter for Minimal

Ugeseddel 4 1. marts - 8. marts

MIPS, registerallokering og MARS

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Indhold. Maskinstruktur Kapitel 1. Assemblersprog Indledning Hop-instruktioner Input og output...

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005

MIPS modulet og registerallokatoren

Programmering i C. Lektion september 2009

Programmering i C. Lektion november 2008

Oversættere Skriftlig eksamen onsdag d. 20. april 2005

DM507 Algoritmer og datastrukturer

Oversættere Skriftlig eksamen onsdag d. 24. januar 2007

DM507 Algoritmer og datastrukturer

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

DM507 Algoritmer og datastrukturer

Kapitel 4 Løkker i C#

DATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Kapitel 3 Betinget logik i C#

Python programmering. Per Tøfting. MacFest

DATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002

1. Løntræk for arbejdsgiver

Forelæsning Uge 2 Mandag

Rettelser til Pilen ved træets rod

Oversættere Skriftlig eksamen onsdag d. 19. april 2006

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

DATALOGI 1E. Skriftlig eksamen fredag d. 16. januar 2004

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims

Spil Master Mind. Indledning.

Forelæsning Uge 2 Mandag

Sammenlign og byt. Et eksempel på dokumentering af et program

Programmering og Problemløsning, 2017

DANMARKS TEKNISKE UNIVERSITET

DM507 Algoritmer og datastrukturer

SWC eksamens-spørgsmål. Oversigt

DM507 Algoritmer og datastrukturer

Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 24. januar 2007

1. Variable og assignment

DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen mandag den 28. maj min min min min.

Noter til C# Programmering Selektion

Start på Arduino og programmering

Oversættere / Datalogi 1E

Forelæsning Uge 2 Mandag

It og informationssøgning Forelæsning 1 6. september 2006 Nils Andersen. Beregning på computer

Python 3 kursus lektion 1:

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato:

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006

Kontrol-strukturer i PHP

Udarbejdet af CFU Absalon

Algoritmer og invarianter

DM507 Algoritmer og datastrukturer

Virkefeltsregler i Java

PHP 3 UGERS FORLØB PHP, MYSQL & SQL

DM507 Algoritmer og datastrukturer

Jeg har i forbindelse med it og programmering designet og udviklet et it-produkt, som kan beregne rødder i en anden gradsligning.

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Løsningsforslag Skriftlig eksamen 3. januar 2013

Programmering i C. Lektion september 2009

Forelæsning Uge 2 Mandag

Procedurer og funktioner - iteration og rekursion

CPUer og maskinkode DM534. Rolf Fagerberg

Noter til C# Programmering Iteration

Introduktion til MatLab Matematisk Modellering af Dynamiske Modeller ved Kasper Bjering Jensen, RUC, februar 2010

Skriftlig eksamen, Programmer som Data januar 2014

Programmering og Problemløsning, 2017

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

P (n): rekursiv beregning af f n kræver f n beregninger af f 1. P (n) er sand for alle n 2.

Lær Python dag 1 - modul 1

Programmering for begyndere Lektion 2. Opsamling mm

Moduler i Standard ML

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

Forelæsning Uge 4 Mandag

1. Web-inkasso for fordringshaver

// Definition af porte og funktioner

Dokumentation af programmering i Python 2.75

Mircobit Kursus Lektion 1

It og informationssøgning Forelæsning oktober 2006 Nils Andersen

Programmering I Java/C#

Programmering C RTG

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

JavaScript. nedarvning.

Introduktion til funktioner, moduler og scopes i Python

PUT og INPUT funktionerne

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Kursusarbejde 2 Grundlæggende Programmering

Skriftlig eksamen i Datalogi

Forelæsning Uge 4 Torsdag

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Danmarks Tekniske Universitet

Programmering i C. Lektion oktober 2008

Status vejledning. Vejledning i håndtering af status scanner, tømning og indlæsning til EasyPOS

Danmarks Tekniske Universitet

Transkript:

Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget Six. Der udleveres en typechecker og oversætter for dette sprog. Rapportopgaven går ud på at modificere disse til at behandle udvidelser af Six sproget. 1 Syntaks Syntaksen for Six er vist i figur 1. Grammatikken er tvetydig, så der suppleres med de nedenfor viste præcedensregler. Plusoperatoren + er venstreassociativ. Fortegnsoperatoren - binder stærkere end +. Semikolon er højreassociativ og binder svagere end then, else, do og until. else binder til nærmeste then (se afsnit 3.5 i Basics of Compiler Design). Parenteser og krølleklammer bruges omkring henholdsvis udtryk og sætninger. 1.1 Leksikalske detaljer Navne (id) starter med et bogstav og kan indeholde bogstaver eller cifre. Kun engelske bogstaver (a z) er tilladt. Der kendes forskel på små og store bogstaver. Navne må ikke være identiske med nøgleord (som er vist i skrivemaskineskrift i figur 1), men må godt indeholde disse. F.eks. er ifald og bread tilladte navne. Talkonstanter (num) er ikke-tomme følger af cifrene 0-9. Talkonstanter er begrænset til tal, der kan repræsenteres som 16-bit tokomplement heltal. Kommentarer starter med symbolet # og slutter ved næste linie- eller sideskift. 1

Prog Funs Funs Fun Funs Fun Funs Fun TypeId ( TypeIds ) Stat TypeId int id TypeId void id TypeIds TypeIds TypeIds1 TypeIds1 TypeId TypeIds1 TypeId, TypeIds1 Exp num Exp id Exp - Exp Exp Exp + Exp Exp id ( Exps ) Exp read Exp ( Exp ) Exps Exps Exps1 Exps1 Exp Exps1 Exp, Exps1 Stat Stat ; Stat Stat id := Exp Stat if Cond then Stat Stat if Cond then Stat else Stat Stat while Cond do Stat Stat repeat Stat until Cond Stat id ( Exps ) Stat write Exp Stat { Stat } Cond Exp = Exp Figure 1: Syntaks for Six 2

2 Semantik Hvor intet andet er angivet, er semantikken for de forskellige konstruktioner i sproget identisk med semantikken for tilsvarende konstruktioner i Pascal og lignende sprog. Kørsel af et program vil kalde den første funktion, som skal være uden argumenter og af returtype void. Funktioner kan alle kalde hinanden gensidigt rekursivt. Variabler og funktioner har separate navnerum, så der kan være variabler med samme navn som funktioner. Se endvidere beskrivelsen af funktionserklæringer herunder. Six arbejder med følgende typer: int er typen af 32-bit tokomplement heltal. void angiver, at der ikke er nogen værdi. void kan ikke bruges som argumenttype til funktioner, kun som returtype. Sætninger beregner ikke nogen værdi, men kan siges at have typen void. Oversigt over operatorer: + adderer heltal. - er foranstillet (unært) minus for heltal. = afgør om argumenterne er ens. Argumenterne skal være heltal. Operander til mellemstillede operatorer beregnes fra venstre til højre. Andre konstruktioner: Funktions-erklæringer består af en angivelse af functionens type og navn, parameterenes typer og navne efterfulgt af en krop (en Stat), der bliver beregnet ved et kald til funktionen. Hvis funktionen har returtype int, er returværdien givet ved værdien på returtidspunktet af en lokal variabel med samme navn som funktionen. Denne variabel oprettes automatisk. Hvis variablen ikke tildeles en værdi inden retur, er returværdien udefineret. En funktion med returtype int må ikke have en parameter med samme navn som funtionen selv, da denne i givet fald vil blive overskygget af den lokale variabel. Generelt må der ikke være to eller flere parametre med samme navn til en funktion, og der må ikke være to eller flere funktioner med samme navn i et program. En funktion kan kalde alle erklærede funktioner, inklusive sig selv. if e 0 then s 1 else s 2 beregner betingelsen e 0. Hvis e 0 er sand, beregnes s 1, ellers beregnes s 2. if e 0 then s beregner betingelsen e 0. Hvis e 0 er sand, beregnes s, ellers ingenting. 3

Funktionskald skrives som et funktionsnavn med argumenterne anført i parentes og adskilt af kommaer. De aktuelle parametre i kaldet skal have samme type som de erklærede formelle parametre til funktionen (i basissproget kan dette kun være int). Parametrene beregnes fra venstre mod højre inden kaldet foretages. Funktionskald, der er udtryk (Exp), kan kun kalde funktioner med returtype int, mens funktionskald, der er sætninger (Stat), kun kan kalde funktioner med returtype void. x := e beregner e og definerer x til at have denne værdi. Variablen x skal være erklæret på forhånd (som parameter eller som returvariable i funktioner). read indlæser et heltal, som bliver værdien af read-udtrykket. write e udskriver det heltal, som det angivne udtryk beregner. 3 Abstrakt syntaks og oversætter Filen Six.sml angiver datastrukturer for den abstrakte syntaks for programmer i Six. Hele programmet har type Six.Prog. Filen SC.sml indeholder et program, der kan indlæse, typechecke og oversætte et Six program. Det kaldes ved at angive filnavnet for programmet (uden extension) på kommandolinien, f.eks. SC fib. Extension for Six-programmer er.six, f.eks. fib.six. Når Six-programmet er indlæst og typechecket, skrives den oversatte kode ud på en fil med samme navn som programmet men med extension.as. Kommandoen SC fib vil altså tage en kildetekst fra filen fib.six og skrive kode ud i filen fib.as. Den symbolske oversatte kode kan konverteres til binær kode med MASM. Kommandoen masm fib.as vil producere binær kode i filen fib.hex. Denne kan køres med MIPS-emulatoren mips, f.eks. mips fib.hex 0. mips læser inddata til programmet fra standard input og skriver uddata til standard output. Typecheckeren er implementeret i filerne Type.sig og Type.sml. Oversætteren er implementeret i filerne Compiler.sig og Compiler.sml. NB! Oversætteren overfører alle parametre i registre, så antallet af parametre til en funktion er begrænset af det antal registre, der er afsat til parameteroverførsel (sat til 10 i Compiler.sml). Rapportopgaven går blandt andet ud på bruge stakken til at overføre yderligere parametre. Hele oversætteren kan genoversættes (inklusive generering af lexer og parser) ved at skrive source compile på kommandolinien (mens man er i et katalog med alle de relevante filer, inclusive compile). Eksempelprogrammer Der er givet en række eksempelprogrammer skrevet i Six: 4

even.six indlæser et tal og skriver 0 eller 1 ud afhængig af om tallet er lige eller ulige. even2.six Som even.six, men det gøres med en løkke. fib.six indlæser et tal n og udskriver det n te Fibonaccital fib2.six Som fib.six, men det gøres med en løkke. recmain.six Kalder hovedfunktionen rekursivt. De ovennævnte programmer har eksempler på inddata i filer med extension.in, f.eks. fib.in. De tilsvarende uddata findes i filer med extension.out, f.eks. fib.out. 3.1 Programmer med typefejl Der er endvidere givet et antal nummererede testprogrammer (error00.six,..., error12.six), der indeholder diverse typefejl. For hvert program giver typecheckeren en relevant fejlmeddelelse og angivelse af omtrentlig position i programmet. 5