Lære å skrive en kompilator

stemmer
699

Anbefalte språk : C / C ++, Java og Ruby.

Jeg leter etter noen nyttige bøker / tutorials på hvordan du skal skrive din egen kompilator bare for pedagogiske formål. Jeg er mest kjent med C / C ++, Java og Ruby, så jeg foretrekker ressurser som involverer en av disse tre, men noen god ressurs er akseptabelt.

Publisert på 04/08/2008 klokken 22:46
kilden bruker
På andre språk...                            


40 svar

stemmer
1k

Big Liste over Resources:

Legende:

  • ¶ Link til en PDF-fil
  • $ Link til en trykt bok
Svarte 04/08/2008 kl. 22:52
kilden bruker

stemmer
69

Dette er en ganske vag spørsmålet, tror jeg; bare på grunn av dybden av emnet involvert. En kompilator kan dekomponeres i to separate deler, men; en øvre halvdel og en bunn-en. Den øvre halvdel tar vanligvis kildespråk og konverterer den til en mellomrepresentasjon, og den nederste halvdel tar seg av plattformen spesifikke kodegenerering.

Likevel, (minst den vi brukte i min kompilatorer klasse) er en idé for en enkel måte å nærme seg dette temaet å bygge kompilatoren i to stykker som er beskrevet ovenfor. Spesielt vil du få en god idé av hele prosessen ved å bare bygge øvre halvdel.

Bare gjør den øverste halvdelen lar deg få erfaring med å skrive leksikalsk analysator og parser og gå til å generere noen "code" (som mellom representasjon jeg nevnte). Så det vil ta source program og konvertere den til en annen representasjon og gjøre noen optimalisering (hvis du vil), som er hjertet av en kompilator. Den nedre halvdelen vil da ta den mellomliggende representasjonen, og generere den byte som trengs for å kjøre programmet på en spesiell arkitektur. For eksempel vil den nederste halvdelen ta mellom representasjon og generere en PE kjørbar.

Noen bøker om dette emnet som jeg fant spesielt nyttig var kompilatorer prinsipper og teknikker (eller Dragon Book, på grunn av den søte dragen på forsiden). Det fikk noen stor teori og definitivt dekker Kontekstfrie grammatikker i en virkelig tilgjengelig måte. Også for å bygge den leksikalske analysator og parser, vil du sannsynligvis bruke * nix verktøy lex og yacc. Og uninterestingly nok, boken heter " lex og yacc " plukket opp der Dragon Book slapp for denne delen.

Svarte 20/07/2009 kl. 23:01
kilden bruker

stemmer
55

Jeg tror Modern Compiler Implementering i ML er den beste innledende kompilatoren skriftlig tekst. Det er en Java-versjon og en C-versjon også, enten som kan være mer tilgjengelig gitt ditt språk bakgrunn. Boken gir deg en mye nyttig grunnlagsmateriale (skanning og analyse, semantisk analyse, aktiverings poster, instruksjon utvalg, RISC og x86 egen kode generasjon) og ulike "avanserte" emner (kompilering OO og funksjonelle språk, polymorfisme, søppelrydding, optimalisering og enkelt statisk tilordning form) inn i forholdsvis liten plass (~ 500 sider).

Jeg foretrekker Modern Compiler Implementering til Dragon boken fordi Modern Iler implementering undersøkelser mindre av feltet - i stedet det har virkelig solid dekning av alle de emnene du trenger å skrive en seriøs, anstendig kompilatoren. Når du arbeider gjennom denne boken vil du være klar til å takle forskningsartikler direkte for mer dybde hvis du trenger det.

Jeg må innrømme jeg har en alvorlig soft spot for Niklaus Wirth Compiler Construction. Det er tilgjengelig online som en PDF. Jeg finner Wirth programmering estetiske bare vakker, men noen mennesker finne sin stil også minimal (for eksempel Wirth favoriserer rekursive nedstigningen parsere, men de fleste CS kurs fokusere på parser generator verktøy;. Wirth språk design er ganske konservativ) Compiler Construction er en veldig konsis destillasjon av Wirth grunnleggende ideer, så om du liker hans stil eller ikke, eller ikke, jeg anbefaler å lese denne boken.

Svarte 10/08/2008 kl. 07:54
kilden bruker

stemmer
46

Jeg stemme med Dragon Book referanse; IMO er det definitive guide til kompilatoren konstruksjon. Gjør deg klar for noen hardcore teori, skjønt.

Hvis du ønsker en bok som er lettere på teori, Spill Scripting Mastery kan være en bedre bok for deg. Hvis du er en totalt nybegynner på kompilator teori, det gir en mildere introduksjon. Den dekker ikke mer praktiske analysemetodene (optisk for ikke-prediktiv rekursive nedstigningen uten å diskutere LL eller LR parsing), og som jeg husker, er det ikke engang diskutere noen form for optimalisering teori. Plus, i stedet for å kompilere til maskinkode, sammenstiller det til en Bytecode som er ment å kjøre på et VM som du også skriver.

Det er fortsatt en anstendig lese, spesielt hvis du kan plukke den opp for billig på Amazon. Hvis du bare ønsker en enkel innføring i kompilatorer, er spill Scripting Mastery ikke en dårlig måte å gå. Hvis du ønsker å gå hardcore opp foran, så du bør betale for noe mindre enn Dragon Book.

Svarte 04/08/2008 kl. 23:08
kilden bruker

stemmer
28

"La oss bygge en kompilator" er kjempebra, men det er litt utdatert. (Jeg sier ikke at det gjør det enda litt mindre gyldig.)

Eller sjekk ut SLANG . Dette ligner på "La oss bygge en kompilator", men er en mye bedre ressurs spesielt for nybegynnere. Dette kommer med en pdf tutorial som tar en syv trinns tilnærming til å lære deg en kompilator. Legge til quora lenken som det har linker til alle de forskjellige havnene SLANG, i C ++, Java og JS, også tolker i python og java, opprinnelig skrevet med C # og .NET-plattformen.

Svarte 04/08/2008 kl. 22:56
kilden bruker

stemmer
24

Hvis du ønsker å bruke kraftige, høyere nivå verktøy heller enn å bygge alt selv, gå gjennom prosjekter og målinger for dette kurset er et ganske godt alternativ. Det er et språk kurs av forfatteren av Java parser motor ANTLR. Du kan få boken for kurset som en PDF-fil fra den pragmatiske programmerere .

Kurset går over standard kompilatoren kompilatoren ting som du vil se andre steder: parsing, typer og typesjekking, polymorfisme, symbol bord, og kodegenerering. Ganske mye det eneste som ikke er dekket er optimaliseringer. Det siste prosjektet er et program som kompilerer et delsett av C . Fordi du bruker verktøy som ANTLR og LLVM, er det mulig å skrive hele kompilatoren på en enkelt dag (jeg har en eksistens bevis på dette, men jeg mener ~ 24 timer). Det er tungt på praktisk ingeniørarbeid ved hjelp av moderne verktøy, litt lysere på teori.

LLVM, forresten, er rett og slett fantastisk. Mange situasjoner der du kanskje normalt kompilere ned til forsamlingen, vil du være mye bedre å kompilere til LLVM sin Intermediate Representasjon i stedet. Det er høyere nivå, tvers, og LLVM er ganske god på å generere optimalisert montasjen fra den.

Svarte 04/08/2008 kl. 23:13
kilden bruker

stemmer
20

Hvis du har liten tid, anbefaler jeg Niklaus Wirth "Compiler Construction" (Addison-Wesley. 1996) , en bitte liten hefte som du kan lese på en dag, men det forklarer det grunnleggende (inkludert hvordan å implementere lexers, rekursive nedstigningen parsere, og din egen stack-baserte virtuelle maskiner). Etter det, hvis du ønsker et dypdykk, er det ingen vei utenom Dragon boken som andre kommentarer foreslår.

Svarte 28/08/2010 kl. 23:14
kilden bruker

stemmer
17

Du ønsker kanskje å se på Lex / YACC (eller Flex / Bison, hva du vil kalle dem). Flex er et leksikalsk analysator, som vil analysere og identifisere de semantiske komponenter ( "tokens") av språket, og Bison vil bli brukt til å definere hva som skjer når hvert symbol er analysert. Dette kan være, men er definitivt ikke begrenset til, skrive ut C-kode, for en kompilator som ville kompilere til C, eller dynamisk kjører instruksjonene.

Denne OSS skal hjelpe deg, og denne opplæringen ser ganske nyttig.

Svarte 20/07/2009 kl. 22:47
kilden bruker

stemmer
16

Generelt sett er det ikke fem minutter tutorial for kompilatorer, fordi det er et komplisert tema og skrive en kompilator kan ta måneder. Du er nødt til å gjøre dine egne søk.

Python og Ruby er vanligvis tolket. Kanskje du ønsker å starte med en tolk i tillegg. Det er generelt lettere.

Det første trinnet er å skrive et formelt språk beskrivelse, grammatikken i programmeringsspråk. Da må du forvandle kildekoden som du ønsker å kompilere eller tolke henhold til grammatikken til et abstrakt syntaks treet, en intern form av kildekoden som datamaskinen forstår og kan operere på. Dette trinnet kalles vanligvis parsing og programvare som analyserer kildekoden kalles en parser. Ofte analysatoren er generert av en parser generator som omformer en formell grammatikk inn i kilde oder maskinkode. For en god, ikke-matematisk forklaring på parsing Jeg anbefaler Analyseteknikker - en praktisk guide. Wikipedia har en sammenligning av parser generatorer som du kan velge at en som passer for deg. Avhengig av parser generator du velger, vil du finne tutorials på internett og for virkelig populære parser generatorer (som GNU bison) er det også bøker.

Skrive en parser for språket kan være veldig vanskelig, men dette avhenger av grammatikk. Så jeg foreslår å holde grammatikk enkelt (i motsetning til C ++); et godt eksempel på dette er LISP.

I det andre trinnet abstrakt syntaks treet blir transformert fra en trestruktur til et lineært mellomliggende representasjon. Som et godt eksempel på dette Lua er Bytecode er ofte sitert. Men mellom representasjon er egentlig avhengig av ditt språk.

Hvis du bygger en tolk, vil du bare nødt til å tolke den mellomliggende representasjon. Du kan også just-in-time-kompilere den. Jeg anbefaler LLVM og libjit for just-in-time-kompilering. For å gjøre språket bruk vil du også måtte inkludere noen inngangs- og utgangsfunksjoner og kanskje en liten standard bibliotek.

Hvis du kommer til å kompilere språk, vil det være mer komplisert. Du må skrive backends for ulike datamaskinarkitekturer og generere maskinkode fra mellom representasjon i disse backends. Jeg anbefaler LLVM for denne oppgaven.

Det er noen bøker om dette emnet, men jeg kan anbefale noen av dem for generell bruk. De fleste av dem er for akademisk eller for praktisk. Det er ingen "Lær deg kompilatoren å skrive i 21 dager", og dermed vil du nødt til å kjøpe flere bøker for å få en god forståelse av hele dette emnet. Hvis du søker på Internett, vil du komme over noen noen elektroniske bøker og forelesningsnotater. Kanskje det er en universitetsbiblioteket i nærheten du hvor du kan låne bøker om kompilatorer.

Jeg anbefaler også en god bakgrunn kunnskap i teoretisk informatikk og grafteori, hvis du kommer til å gjøre prosjektet alvorlig. En grad i informatikk vil også være nyttig.

Svarte 21/07/2009 kl. 10:37
kilden bruker

stemmer
14

Ta en titt på boken under. Forfatteren er skaperen av ANTLR .

Språk Gjennomføring Patterns: Lag ditt eget domene-spesifikke og generelle Programmeringsspråk .

alt tekst

Svarte 17/05/2010 kl. 23:38
kilden bruker

stemmer
11

En bok ennå ikke foreslått, men svært viktig er "Linkers og Vedlikehold" av John Levine. Hvis du ikke bruker en ekstern assembler, trenger du en måte å sende ut et objekt fil som kan knyttes til den endelige programmet. Selv om du bruker en ekstern assembler, vil du sannsynligvis trenger for å forstå omplasseringer og hvordan hele programmet lasting prosessen fungerer for å gjøre et arbeidsredskap. Denne boken samler mye av tilfeldige lore rundt denne prosessen for ulike systemer, inkludert Win32 og Linux.

Svarte 18/08/2008 kl. 20:18
kilden bruker

stemmer
10

Jeg fant Dragon boken altfor vanskelig å lese med for mye fokus på språkteori som egentlig ikke er nødvendig å skrive en kompilator i praksis.

Jeg vil legge til Oberon boken som inneholder hele kilden til en utrolig rask og enkel Oberon kompilatoren Prosjekt Oberon .

alt tekst

Svarte 09/08/2010 kl. 18:33
kilden bruker

stemmer
10

Hvis du er villig til å bruke LLVM, sjekk ut dette: http://llvm.org/docs/tutorial/ . Den lærer deg hvordan du skal skrive en kompilator fra grunnen av ved hjelp LLVM rammer, og ikke anta at du har noen kunnskap om emnet.

Opplæringen anbefaler at du skriver din egen parser og lexer etc, men jeg anbefaler deg å se nærmere på bison og bøy når du får ideen. De gjør livet så mye enklere.

Svarte 20/08/2008 kl. 10:01
kilden bruker

stemmer
10

The Dragon Book er definitivt "bygge kompilatorer" bok, men hvis språket er ikke fullt så komplisert som dagens generasjon av språk, kan det være lurt å se på Interpreter mønster fra Design Patterns .

Eksempelet i boka design et regulært uttrykk lignende språk og er godt gjennomtenkt, men som de sier i boken, er det bra for å tenke gjennom prosessen, men er effektiv egentlig bare på små språk. Imidlertid er det mye raskere å skrive en tolk for et lite språk med dette mønsteret enn å måtte lære om alle de forskjellige typer parsere, yacc og lex, et cetera ...

Svarte 05/08/2008 kl. 16:16
kilden bruker

stemmer
9

Jeg husker jeg spurte dette spørsmålet rundt sju år siden da jeg var ganske ny i programmering. Jeg var veldig forsiktig når jeg spurte og overraskende om jeg ikke får så mye kritikk som du får her. De imidlertid peke meg i retning av " drage Book ", som er etter min mening, en virkelig flott bok som forklarer alt du trenger å vite for å skrive en kompilator (du vil selvsagt nødt til å beherske et språk eller to. Jo mer språk du vet, jo bedre.).

Og ja, mange sier lese den boka er gal, og du vil ikke lære noe av det, men jeg er helt uenig med det.

Mange sier også at det å skrive kompilatorer er dum og meningsløs. Vel, det er en rekke grunner til at kompilatoren utvikling til nytte: - Fordi det er gøy. - Det er lærerikt, når lære å skrive kompilatorer vil du lære mye om informatikk og andre teknikker som er nyttige når du skriver andre programmer. - Hvis ingen skrev kompilatorer de eksisterende språk ville ikke få noe bedre.

Jeg skrev ikke min egen kompilator med en gang, men etter å ha spurt jeg visste hvor du skal begynne. Og nå, etter å ha lært mange forskjellige språk og lese Dragon Book, skriving er ikke så mye av et problem. (Jeg er også studere datateknikk atm, men det meste av det jeg vet om programmering er selvlært.)

I konklusjon: - The Dragon Book er en stor "tutorial". Men bruke litt tid på å mestre et språk eller to før du forsøker å skrive en kompilator. Ikke forvent å være en kompilator guru innen det neste tiåret eller så skjønt.

Boken er også bra hvis du ønsker å lære å skrive parsere / tolker.

Svarte 06/08/2009 kl. 22:37
kilden bruker

stemmer
9

Jeg ser på det samme konseptet, og fant dette lovende artikkel av Joel Pobar,

Lag et språk kompilatoren for .NET Framework

han diskuterer et høyt nivå begrepet en kompilator og fortsetter å oppfinne sin egen langauge for .NET Framework. Selv om det er rettet mot .Net Framework, bør mange av konseptene kunne reproduseres. Artikkelen dekker:

  1. langauge definisjon
  2. Scanner
  3. Parser (bit im mest interessert i)
  4. Targeting .Net Framework
  5. Kode generator

det er andre emner, men du får bare.

Dens rettet til folk starter ut, skrevet i C # (ikke helt Java)

HTH

bein

Svarte 30/12/2008 kl. 23:01
kilden bruker

stemmer
9

"... La oss bygge en kompilator ..."

Jeg hadde andre http://compilers.iecc.com/crenshaw/ av @sasb . Glem å kjøpe flere bøker for øyeblikket.

Hvorfor? Verktøy og språk.

Språket som kreves er Pascal og hvis jeg husker riktig er basert på Turbo-Pascal. Det bare skjer så hvis du går til http://www.freepascal.org/ og laste ned Pascal kompilatoren alle eksemplene jobbe rett fra siden ~ http://www.freepascal.org/download.var Den strekke ting om gratis Pascal er at du kan bruke den nesten uansett prosessor eller OS du kan ta vare på.

Når du har mestret leksjonene deretter prøve den mer avanserte " Drage Bestill " ~ http://en.wikipedia.org/wiki/Dragon_book

Svarte 20/08/2008 kl. 11:28
kilden bruker

stemmer
8

Fra comp.compilers FAQ :

"Programmere en Personal Computer" av Per Brinch Hansen Prentice-Hall 1982 ISBN 0-13-730283-5

Dette er dessverre titulerte boken forklarer design og etablering av en enkelt bruker programmeringsmiljø for mikroer, ved hjelp av en Pascal-lignende språk kalt Edison. Forfatteren viser alle kildekoden og forklaringer for den trinnvise innføringen av en Edison kompilatoren og enkeltstående bære operativsystem, alle skrevet i Edison seg (med unntak av en liten bærende kjerne skrevet på en symbolsk assembler for PDP 11/23; den komplett kilde kan også bestilles for IBM PC).

De mest interessante ting om denne boken er: 1) sin evne til å demonstrere hvordan å lage en komplett, selvstendig, selvopprettholde, nyttig kompilatoren og operativsystem, og 2) det interessant diskusjon om språk design og spesifikasjoner problemer og handels- offs i kapittel 2.

"Brinch Hansen på Pascal kompilatorer" av Per Brinch Hansen Prentice-Hall 1985 ISBN 0-13-083098-4

En annen lys-on-teori heavy-on-pragmatikk Slik gjør-how-to-kode det bok. Forfatteren viser utforming, gjennomføring, og komplette kildekode for en kompilator og p-kode tolk for Pascal- (Pascal "minus"), en Pascal delsett med boolske og heltall typer (men ingen tegn, Real, subranged eller oppregnet typer) , konstante og variable definisjoner og matrise og registreringstyper (men ikke pakket, variant, satt, peker, navnløse, omdøpt, eller filtyper), uttrykk, en tildelingssetning, nestede prosedyre definisjoner med verdi og variable parametre, if-setninger, mens påstander, og begynne-endeblokker (men ingen funksjonsdefinisjoner, prosedyre parametere, goto oppstillingen og etiketter, tilfelle uttalelser, gjenta uttalelser, for påstander, og med uttalelser).

Kompilatoren og tolk er skrevet i Pascal (Pascal "stjerne"), en Pascal undergruppe utvidet med noen Edison-stil funksjoner for å lage programvare utvikling systemer. En Pascal * kompilator for IBM PC selges av forfatteren, men det er lett å portere bokens Pascal- kompilatoren til enhver passende Pascal plattform.

Denne boken gjør design og implementering av en kompilator ser lett. Jeg liker spesielt måten forfatteren er opptatt av kvalitet, pålitelighet og testing. Kompilatoren og tolk kan lett brukes som grunnlag for en mer involvert språk eller kompilator prosjekt, spesielt hvis du er presset for raskt å få noe opp og kjører.

Svarte 26/06/2010 kl. 20:17
kilden bruker

stemmer
8

Du bør sjekke ut Darius Bacons " ichbins ", som er en kompilator for et lite Lisp dialekt, målretting C, i litt over 6 sider med kode. Fordelen den har over de fleste leketøys kompilatorer er at språket er komplett nok til at kompilatoren er skrevet i den. (The Tarball omfatter også en tolk for å bootstrap tingen).

Det er flere ting om hva jeg fant nyttig i å lære å skrive en kompilator på min Ur-Scheme nettside.

Svarte 05/10/2008 kl. 16:00
kilden bruker

stemmer
8

En enkel måte å lage en kompilator er å bruke bison og ledning (eller lignende), bygge et tre (AST) og generere koden i C. Med generering av C-kode som er det viktigste trinnet. Ved å generere C-kode, vil språket automatisk fungere på alle plattformer som har en C-kompilator.

Generere C-kode er like enkelt som å generere HTML (bare bruke print, eller tilsvarende), som igjen er mye enklere enn å skrive en C parser eller HTML-parser.

Svarte 20/08/2008 kl. 09:56
kilden bruker

stemmer
7

Beklager, det er på spansk, men dette er litteratur av et kurs som heter "Compiladores e tolker" (kompilatorer og tolker) i Argentina.

Kurset var fra formspråk teori til kompilatoren konstruksjon, og disse er de emnene du trenger for å bygge, minst, en enkel kompilator:

  • Kompilatorer Design i C.
    Allen I. Holub

    Prentice-Hall. 1990.

  • Compiladores. Teoría y Construcción.
    Sanchis Llorca, FJ, Galán Pascual, C. Editorial Paran. 1988.

  • Compiler Construction.
    Niklaus Wirth

    Addison-Wesley. 1996.

  • Lenguajes, Gramáticas y Automater. Un enfoque práctico.
    Pedro Isasi Viñuela, Paloma Martínez Fernández, Daniel Borrajo Millán. Addison-Wesley Iberoamericana (España). 1997.

  • Kunsten kompilatoren design. Teori og praksis.
    Thomas Pittman, James Peters.

    Prentice-Hall. 1992.

  • Objektorientert Compiler Construction.
    Jim Holmes.
    Prentice Hall, Englewood Cliffs, NJ 1995

  • Compiladores. Conceptos Fundamentales.
    B. Teufel, S. Schmidt, T. Teufel.

    Addison-Wesley Iberoamericana. 1995.

  • Introduksjon til Automata Theory, språk, og Computation.

    John E. Hopcroft. Jeffref D. Ullman.
    Addison-Wesley. 1979.

  • Introduksjon til formelle språk.
    György E. Révész.

    Mc Graw Hill. 1983.

  • Parsing teknikker. En praktisk guide.
    Dick Grune, Ceriel Jacobs.
    Impreso por los autores. 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

  • Yacc: Yet Another Compiler-kompilator.
    Stephen C. Johnson
    Computing Science Technical Report Nº 32, 1975. Bell Laboratories. Murray Hill, New
    Jersey.

  • Lex: En Lexical Analyzer Generator.
    ME Lesk, E. Schmidt. Computing Science Technical Report Nº 39, 1975. Bell Laboratories. Murray Hill, New Jersey.

  • lex & yacc.
    John R. Levine, Tony Mason, Doug Brown.
    O'Reilly & Associates. 1995.

  • Elementer av teorien om beregning.
    Harry R. Lewis, Christos H. Papadimitriou. Segunda edicion. Prentice Hall. 1998.

  • Un Algoritmo eficiente para la Construcción del Grafo de Dependencia de Control.
    Salvador V. Cavadini.
    Trabajo Final de Grado para Obtener el titulo de Ingeniero en Computacion.
    Facultad de Matemática Aplicada. UCSE 2001.

Svarte 25/04/2009 kl. 17:23
kilden bruker

stemmer
7

LCC kompilator ( wikipedia ) ( prosjektets hjemmeside ) av Fraser og Hanson er beskrevet i boken "En Retargetable C Compiler: Design og implementering". Det er ganske lesbar og forklarer hele kompilatoren, ned til kodegenerering.

Svarte 16/09/2008 kl. 16:21
kilden bruker

stemmer
7

Python leveres med en python kompilator skrevet i Python. Du kan se kildekoden, og det inkluderer alle faser, fra analyse, abstrakt syntaks tre, utslipp kode, etc. Hack det.

Svarte 12/08/2008 kl. 11:25
kilden bruker

stemmer
6

Ikke en bok, men en teknisk papir og en enormt morsom erfaring hvis du ønsker å vite mer om kompilatorer (og metacompilers) ... Dette nettstedet leder deg gjennom å bygge en helt selvstendig kompilator system som kan kompilere selv og andre språk:

Tutorial: Metacompilers Del 1

Dette er alle basert på en utrolig liten 10-siders teknisk papir:

Val Schorre META II: En Syntax-Oriented Compiler Skrive Språk

fra ærlig-til-gud 1964. Jeg lærte å bygge kompilatorer fra dette tilbake i 1970. Det er en halsbrekkende øyeblikk når du endelig Grok hvordan kompilatoren kan regenerere seg selv ....

Jeg vet nettstedet forfatteren fra min college dager, men jeg har ingenting å gjøre med nettstedet.

Svarte 28/08/2009 kl. 00:01
kilden bruker

stemmer
5
  1. Dette er et stort emne. Ikke undervurder dette punktet. Og ikke undervurder mitt poeng å ikke undervurdere det.
  2. Jeg hører Drage Book er en (den?) Sted å starte, sammen med søker. :) Få bedre på å søke, til slutt vil det være ditt liv.
  3. Bygg din egen programmeringsspråk er absolutt en god trening! Men vet at det aldri vil bli brukt til noe praktisk formål på slutten. Unntak fra dette er få og svært langt mellom.
Svarte 20/07/2009 kl. 22:44
kilden bruker

stemmer
5

Hvis du er interessert i å skrive en kompilator for et funksjonelt språk (i stedet for en saksbehandlings en) Simon Peyton-Jones og David Lester er " Implementering av funksjonelle språk: en tutorial " er en utmerket guide.

De konseptuelle grunnleggende om hvordan evaluerings verk funksjonelle styres av eksempler i en enkel, men kraftig funksjonelt språk som heter "kjerne". I tillegg er hver del av kjerne språk kompilatoren forklart med kodeeksemplene i Miranda (et rent funksjonelt språk svært lik Haskell).

Flere ulike typer kompilatorer er beskrevet, men selv om du bare følger den såkalte mal kompilator for kjerne vil du ha en god forståelse av hva som gjør funksjonell programmering tick.

Svarte 01/10/2008 kl. 09:30
kilden bruker

stemmer
5

Det er mange gode svar her, så jeg trodde jeg ville bare legge til én til listen:

Jeg fikk en bok som heter Prosjekt Oberon mer enn et tiår siden, som har noen veldig godt skrevet tekst på kompilatoren. Boken virkelig skiller seg ut i den forstand at kilden og forklaringer er svært hendene på og lesbar. Den fullstendige teksten (2005-utgaven) har blitt gjort tilgjengelig i pdf, slik at du kan laste ned akkurat nå. Kompilatoren er omtalt i kapittel 12:

http://www-old.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf

Niklaus Wirth, Jürg Gutknecht

(Behandlingen er ikke så omfattende som sin bok om kompilatorer)

Jeg har lest flere bøker om kompilatorer, og jeg kan andre dragen boken, tid brukt på denne boken er veldig verdt.

Svarte 18/09/2008 kl. 23:31
kilden bruker

stemmer
4

Du kan bruke BCEL av Apache Software Foundation. Med dette verktøyet kan du generere assembler-lignende kode, men det er Java med BCEL API. Du kan lære hvordan du kan generere mellomspråkkoden (i dette tilfellet bytekode).

enkelt eksempel

  1. Lag en Java klasse med denne funksjonen:

    public String maxAsString(int a, int b) {
        if (a > b) {
            return Integer.valueOf(a).toString();
        } else if (a < b) {
            return Integer.valueOf(b).toString();
        } else {
            return "equals";
        }
    }
    

Nå kjører BCELifier med denne klassen

BCELifier bcelifier = new BCELifier("MyClass", System.out);
bcelifier.start();

Du kan se resultatet på konsollen for hele klassen (hvordan å bygge bytekode MyClass.java). Koden for funksjonen er dette:

private void createMethod_1() {
  InstructionList il = new InstructionList();
  MethodGen method = new MethodGen(ACC_PUBLIC, Type.STRING, new Type[] { Type.INT, Type.INT }, new String[] { "arg0", "arg1" }, "maxAsString", "MyClass", il, _cp);

  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load first parameter to address 1
  il.append(InstructionFactory.createLoad(Type.INT, 2)); // Load second parameter to adress 2
    BranchInstruction if_icmple_2 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPLE, null); // Do if condition (compare a > b)
  il.append(if_icmple_2);
  il.append(InstructionFactory.createLoad(Type.INT, 1)); // Load value from address 1 into the stack
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_13 = il.append(InstructionFactory.createLoad(Type.INT, 1));
  il.append(InstructionFactory.createLoad(Type.INT, 2));
    BranchInstruction if_icmpge_15 = InstructionFactory.createBranchInstruction(Constants.IF_ICMPGE, null); // Do if condition (compare a < b)
  il.append(if_icmpge_15);
  il.append(InstructionFactory.createLoad(Type.INT, 2));
  il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
  il.append(_factory.createInvoke("java.lang.Integer", "toString", Type.STRING, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  InstructionHandle ih_26 = il.append(new PUSH(_cp, "equals")); // Return "equals" string
  il.append(InstructionFactory.createReturn(Type.OBJECT));
  if_icmple_2.setTarget(ih_13);
  if_icmpge_15.setTarget(ih_26);
  method.setMaxStack();
  method.setMaxLocals();
  _cg.addMethod(method.getMethod());
  il.dispose();
}
Svarte 14/07/2011 kl. 15:42
kilden bruker

stemmer
4

Jeg likte Crenshaw opplæringen også, fordi det gjør det helt klart at en kompilator er bare et annet program som leser noen innspill og skriver litt ut satt.

Lese det.

Arbeid det hvis du vil, men deretter se på en annen referanse på hvordan større og mer komplette kompilatorer er egentlig skrevet.

Og lese På Tillitsfull Trust , for å få en anelse om unobvious ting som kan gjøres i dette domenet.

Svarte 22/08/2008 kl. 15:57
kilden bruker

stemmer
3

Ikke inkludert i listen så langt er denne boken:

Grunnleggende om Compiler Design (Torben Mogensen) (fra avd. For informatikk, Universitetet i København)

Jeg er også interessert i å lære om kompilatorer og planlegger å gå inn som industrien i de neste par årene. Denne boken er den ideelle teori bok å begynne å lære kompilatorer så vidt jeg kan se. Det er GRATIS å kopiere og reprodusere, renslig og nøye skrevet og gir den til deg i vanlig engelsk uten kode, men likevel presenterer mekanikerne ved hjelp av instruksjoner og diagrammer osv Verdt en titt imo.

Svarte 12/03/2014 kl. 16:05
kilden bruker

stemmer
3

Mangler fra listen: Garbage Collection: Algoritmer for automatisk dynamisk minnehåndtering, ved Jones og Lins.

(Forutsatt at du skriver kompilatoren og runtime-systemet, og at du implementere en søppel samles språk.

Svarte 26/06/2010 kl. 23:43
kilden bruker

stemmer
3

Jeg har skrevet en tutorial på kompilatoren design, med tittelen "La oss bygge et skript Engine-kompilator, samt en egen kode kompilator kalt Bxbasm The Online doc-er på. Http://geocities.com/blunt_axe_basic/tutor/Bxb- Tutor.doc

Docs, støttefiler og kompilator, i zip form, er på: http://geocities.com/blunt_axe_basic

Også: http://tech.groups.yahoo.com/group/QDepartment

Steve A.

Svarte 13/01/2009 kl. 22:31
kilden bruker

stemmer
3

The Dragon Book er for komplisert. Så overse det som et utgangspunkt. Det er bra og gjør at du tenker mye når du allerede har et utgangspunkt, men for det første, kanskje bør du bare prøve å skrive en matematisk / logiske Uttrykksanalysatoren bruke RD, LL eller LR analyseteknikker med alt (lexing / parsing) skrevet hånd i kanskje C / Java. Dette er interessant i seg selv, og gir deg en idé om de problemene som er involvert i en kompilator. Deretter kan du hoppe på din egen DSL bruke noen skriptspråk (siden behandlingen tekst er vanligvis lettere i disse) og som noen sa, generere kode i enten skriptspråk selv eller C. Du bør nok bruke flex / bison / antlr etc til gjøre lexing / parsing hvis du kommer til å gjøre det i c / java.

Svarte 01/10/2008 kl. 20:24
kilden bruker

stemmer
2

Jeg er overrasket over at det ikke har blitt nevnt, men Donald Knuth The Art of Computer Programming ble opprinnelig skrevet som en slags tutorial på kompilatoren skriftlig.

Selvfølgelig har Dr. Knuth tilbøyelighet for å gå i dybden på temaer førte til kompilatoren-skriving opplæringen blir utvidet til anslagsvis 9 volumer, bare tre av dem faktisk har blitt publisert. Det er en ganske komplett utstilling på programmering emner, og dekker alt du trenger å vite om å skrive en kompilator, i minste detalj.

Svarte 21/07/2009 kl. 00:20
kilden bruker

stemmer
2

Som et utgangspunkt vil det være bra å lage en rekursiv nedstigning parser (RDP) (la oss si at du ønsker å lage din egen smak av BASIC og bygge en BASIC tolk) for å forstå hvordan du skal skrive en kompilator. Jeg fant den beste informasjonen i Herbert Schild C Privilegerte brukere, kapittel 7. Dette kapittelet henviser til en annen bok av H. Schildt "C Den komplette Reference" der han forklarer hvordan du oppretter en kalkulator (et enkelt uttrykk parser). Jeg fant både bøker på eBay veldig billig. Du kan sjekke koden for boken hvis du går til www.osborne.com eller sjekke inn www.HerbSchildt.com jeg fant den samme koden, men for C # i sin siste bok

Svarte 20/08/2008 kl. 11:16
kilden bruker

stemmer
1

Hvis du ikke er bare ute etter bøker, men også interessert i nettsider som har artikler om emnet, har jeg blogget om ulike aspekter ved å lage et programmeringsspråk. De fleste av innleggene kan bli funnet i bloggen min kategorien "Språk Design" .

Spesielt dekker jeg genererer Intel maskinkoden manuelt, automatisk generering av maskin eller bytekode, noe som skaper en bytecode tolk, skrive et objektorientert kjøring, noe som skaper en enkel lasteren, og å skrive en enkel mark / feie søppel samler. Alt dette i en svært praktisk og pragmatisk måte i stedet for å kjede deg mye teori.

Ville sette pris på tilbakemeldinger på disse.

Svarte 02/04/2014 kl. 12:39
kilden bruker

stemmer
1

Den raskeste tilnærmingen er gjennom to bøker:

1990-versjonen av En introduksjon til sammensetningen Techniques, en First Course ved hjelp av ANSI C, lex, og YACC av JP Bennett - en perfekt balanse mellom eksempelkode, parsing teori og Design den inneholder en komplett kompilator skrevet i C, lex og yacc for en enkel grammatikk

Drage Book (eldre versjon) - det meste en detaljert referanse for de funksjonene som ikke dekkes av den tidligere boken

Svarte 01/04/2011 kl. 19:39
kilden bruker

stemmer
1

Når jeg ønsker å prøve ut et nytt språk idé, jeg bare skrive en enkel parser, og har det generere noen språk som er lett å få gode kompilatorer for, som C.

Hvordan tror du C ++ ble gjort?

Svarte 21/07/2009 kl. 00:42
kilden bruker

stemmer
1

Hvis du er som meg, som ikke har noen formell utdanning innen datavitenskap, og er interessert i å bygge / ønsker å vite hvordan en kompilator fungerer:

Jeg er anbefalt "programmeringsspråk prosessorer i Java: kompilatorer og tolker", en fantastisk bok for en selvlært dataprogrammerer.

Fra mitt synspunkt, forstå de grunnleggende språkteori, automatisere maskinen, og mengdelære er ikke et stort problem. Problemet er hvordan man skal slå av disse tingene inn kode. Den ovennevnte boken forteller deg hvordan du skal skrive en parser, analyse kontekst, og generere kode. Hvis du ikke kan forstå denne boken, så må jeg si, gi opp å bygge en kompilator. Boken er best programmering boken jeg noensinne har lest.

Det er en annen bok, også bra, Compiler Design i C . Det er mye kode, og den forteller deg alt om hvordan du kan bygge en kompilator og Lexer verktøy.

Bygge en kompilator er en morsom programmering praksis, og kan lære deg hauger av programmering.

Ikke kjøpe drage boken . Det var en sløsing med penger og tid, og er ikke for en utøver.

Svarte 05/02/2009 kl. 02:55
kilden bruker

stemmer
0
  • Start med å sørge for at du kan svare på de fleste spørsmålene merket C ++ her på Stack Overflow.
  • Etter det, bør du sørge for at du forstår hvordan andre kompilatorer jobbe og forstå [deler av] kildekoden.
  • Du vil merke at du trenger assembler og vil begynne å lære assembler før du kan svare på mange spørsmål med den koden.
  • Hvis du har kommet så langt, vil du finne at flere år har gått, og innse hvor stort et slikt prosjekt er, og muligens smile på ditt eget spørsmål fra den gangen (hvis denne siden fortsatt eksisterer på den tiden) ...
Svarte 20/07/2009 kl. 23:01
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more