Nauka pisania kompilatora

głosy
699

Preferowane języki : C / C ++, Java i Ruby.

Szukam kilka pomocnych książek / samouczki, jak napisać własny kompilator po prostu do celów edukacyjnych. Jestem najbardziej znane z C / C ++, Java, Ruby, więc wolę zasobów, które dotyczą jednego z tych trzech, ale każdy dobry zasób jest dopuszczalne.

Utwórz 04/08/2008 o 23:46
źródło użytkownik
W innych językach...                            


40 odpowiedzi

głosy
1k

Big Lista zasobami:

Legenda:

  • ¶ Link do pliku PDF
  • $ Link do książki drukowanej
Odpowiedział 04/08/2008 o 23:52
źródło użytkownik

głosy
69

Jest to dość niejasne pytanie, myślę; tylko ze względu na głębokość temacie zaangażowanych. Kompilator może być rozłożony na dwie oddzielne części, jednakże; górna połowa i dolna jeden. Górna połowa trwa zazwyczaj język źródłowy i konwertuje go do pośredniej reprezentacji, a dolna połowa zajmuje się konkretnym generowania kodu platformy.

Niemniej jednak, jeden pomysł na prosty sposób podejścia do tego tematu (jeden użyliśmy w mojej klasie kompilatory, przynajmniej) jest budowanie kompilator w dwóch kawałkach opisanych powyżej. Konkretnie, dostaniesz dobry pomysł, cały proces tylko o budowanie górną połowę.

Po prostu robi górną połowę pozwala uzyskać doświadczenie pisania analizator leksykalny oraz parser i przejdź do generowania pewne „kod” (to pośredni reprezentacji wspominałem). Więc to zajmie program źródłowy i konwertować je do innej reprezentacji i zrobić kilka optymalizacji (jeśli chcesz), który jest sercem kompilatora. Dolna połowa będzie wówczas przyjąć, że pośrednią reprezentację i generują bajtów potrzebnych do uruchomienia programu na określonej architekturze. Na przykład, dolna połowa będzie miała swoją reprezentację pośrednią i wygenerować plik wykonywalny PE.

Niektóre książki na ten temat, które znalazłem szczególnie pomocne było kompilatory zasad i technik (lub Dragon książkę ze względu na ładny smok na okładce). Ma jakąś wielką teorię i na pewno obejmuje gramatyk bezkontekstowych w bardzo przystępny sposób. Również na budowę analizator leksykalny oraz parser, prawdopodobnie będziesz używać narzędzia lex * nix i yacc. I dość obojętnie, książka nazywa się „ lex i yacc ” podniósł gdzie Smok Book zostało przerwane do tej części.

Odpowiedział 21/07/2009 o 00:01
źródło użytkownik

głosy
54

Myślę Nowoczesne Compiler Wdrożenie w ML jest najlepszy tekst wprowadzający do pisania kompilator. Istnieje wersja Java i wersja C też, z których każdy może być bardziej dostępne podane Twój języki tła. Książka pakuje wiele przydatnych materiału podstawowego (skanowanie i parsowania, analizy semantycznej, rekordy aktywacji, wybór instrukcji, RISC i x86 rodzimy generowania kodu) i różne „zaawansowanych” tematów (kompilacja oo oraz języków funkcyjnych, polimorfizm, zbieranie śmieci, optymalizacji i pojedynczy statyczne postać przypisania) w stosunkowo małej przestrzeni (~ 500 stron).

Wolę Nowoczesne Compiler Wdrożenie do książki Smoka ponieważ badania wdrożeniowe Nowoczesne kompilatora mniejszym zakresie - zamiast tego ma naprawdę solidne pokrycie wszystkich tematów, które trzeba napisać poważną, godną kompilatora. Po pracy za pośrednictwem tej książki będziesz gotowy do walki prac badawczych bezpośrednio do głębiej, jeśli jest to potrzebne.

Muszę przyznać, że mają poważny słabość do Niklaus Wirth za Compiler Construction. Jest dostępny w Internecie w postaci pliku PDF. Uważam Wirtha programowanie estetyczny po prostu piękne, jednak niektórzy ludzie uważają, jego styl zbyt minimalne (np Wirth sprzyja rekurencyjnych parser pochodzenia, ale większość kursów CS skupić się na parsera narzędzi prądotwórczych;. Projekty językowe Wirth są dość konserwatywny) Compiler Construction jest bardzo zwięzły destylacja podstawowych pojęć Wirtha, więc czy lubisz swój styl, czy też nie, czy nie, bardzo polecam czytania tej książki.

Odpowiedział 10/08/2008 o 08:54
źródło użytkownik

głosy
45

Zgadzam się z odniesieniem Smok książce; IMO, to jest ostateczne przypomnienie kompilator budowy. Przygotuj się na teorii hardcore, choć.

Jeśli chcesz książkę, która jest lżejsza o teorii gier skryptów Mastery może być lepszym książka dla Ciebie. Jeśli jesteś nowicjuszem w sumie teorii kompilatorów, zapewnia łagodniejsze wprowadzenie. Nie obejmuje ona bardziej praktycznych metod analizy składniowej (decydując się na non-prognostycznej rekurencyjnego zejścia bez omawiania LL lub LR parsowania), i jak pamiętam, to nawet nie dyskutować jakiejkolwiek teorii optymalizacji. Plus, zamiast kompilacji do kodu maszynowego, kompiluje się do kodu bajtowego, który ma działać na maszynie wirtualnej, które także napisać.

To wciąż przyzwoity odczytu, szczególnie jeśli można go podnieść za tanio na Amazon. Jeśli chcesz tylko łatwe wprowadzanie do kompilatorów, Game Scripting Mastery nie jest zła droga. Jeśli chcesz iść Hardcore z przodu, to należy godzić się na nie mniej niż Dragon Book.

Odpowiedział 05/08/2008 o 00:08
źródło użytkownik

głosy
28

„Budujmy kompilator” jest niesamowite, ale nieco przestarzały. (Nie mówię, że to sprawia, że nawet trochę mniej ważne).

Lub sprawdzić slang . Jest to podobne do „Budujmy kompilator”, ale jest znacznie lepiej zasób zwłaszcza dla początkujących. Ten pochodzi z poradnika pdf który odbywa podejścia 7 krok w nauczaniu ci kompilatora. Dodanie linku Quora gdyż mają linki do wszystkich różnych portach slang, w C ++, Java i JS, również tłumaczy w Python i Java, C # oraz platformy .NET pierwotnie napisane.

Odpowiedział 04/08/2008 o 23:56
źródło użytkownik

głosy
24

Jeśli szukasz w użyciu potężnych narzędzi wyższego poziomu, zamiast budowania wszystkiego samemu, przeżywa projektów i odczytów dla tego kursu jest bardzo dobrym rozwiązaniem. Jest to kurs języków przez autora antlr silnika parser Java. Można dostać książkę za kurs w postaci pliku PDF z pragmatycznych programistów .

Kurs podchodzi standardowego kompilatora kompilatora rzeczy, które chcesz zobaczyć, gdzie indziej: analizowania, rodzaju i typu kontroli, polimorfizm, stoły symbol i generowania kodu. Dość dużo jedyną rzeczą, która nie jest pokryta jest optymalizacje. Ostateczny projekt jest programem, który kompiluje podzbiór C . Ponieważ używasz narzędzi takich jak antlr i LLVM, jest to możliwe, aby napisać całą kompilator w ciągu jednego dnia (mam dowód istnienia tego, choć mam na myśli ~ 24 godzin). To ciężkie na praktycznym wykorzystaniu nowoczesnych narzędzi inżynierii, nieco lżejszy na teorii.

LLVM, nawiasem mówiąc, jest po prostu fantastyczne. Wiele sytuacji, gdzie można normalnie kompilacji aż do montażu, byłbyś znacznie lepiej kompilacji do pośredniego Reprezentacji LLVM w zamian. Jest to wyższy poziom, wieloplatformowym i LLVM jest dość dobry w generowaniu zoptymalizowany montaż od niego.

Odpowiedział 05/08/2008 o 00:13
źródło użytkownik

głosy
20

Jeśli masz mało czasu, polecam Niklaus Wirth za „Compiler budowie” (Addison-Wesley. 1996) , to malutkie książeczki, które można przeczytać w jeden dzień, ale to wyjaśnia podstawy (w tym, jak wdrożyć lexers, rekurencyjnych parser pochodzenia, i własne maszyny wirtualne na stosie). Po tym, jeśli chcesz głębokie nurkowania, nie ma sposobu, wokół książki Smoka innych komentujących sugerować.

Odpowiedział 29/08/2010 o 00:14
źródło użytkownik

głosy
17

Można zajrzeć do Lex / Yacc (lub Flex / Bison, co chcesz je nazwać). Flex to analizator leksykalny, który będzie analizować i identyfikować elementy semantyczne ( „znaków”) swojego języka, a Bison zostaną wykorzystane do określenia tego, co się dzieje, kiedy każdy żeton jest analizowany. To może być, ale na pewno nie jest ograniczone do drukowania kodu C, przez kompilator, które skompilować do C, lub dynamicznie działa zgodnie z instrukcjami.

To FAQ powinno pomóc, a ten poradnik wygląda całkiem użyteczne.

Odpowiedział 20/07/2009 o 23:47
źródło użytkownik

głosy
16

Ogólnie rzecz biorąc, nie ma poradnik pięć minut dla kompilatorów, ponieważ jest to skomplikowany temat i pisanie kompilator może potrwać miesiące. Trzeba będzie zrobić własne poszukiwania.

Python i Ruby są zazwyczaj interpretowane. Być może chcesz zacząć od tłumacza, jak również. To generalnie łatwiejsze.

Pierwszym krokiem jest napisanie formalnego opisu języka, gramatyki swojego języka programowania. Następnie trzeba przekształcić kod źródłowy, który chcesz skompilować lub interpretacji zgodnie z gramatyki w abstrakcyjne drzewo składni, wewnętrznego postaci kodu źródłowego, że komputer rozumie i może działać dalej. Ten etap nazywa się zwykle parsowanie i oprogramowanie, które analizuje kod źródłowy nazywa parser. Często parser jest generowany przez generator parsera które przekształcają formalnej gramatyki na źródło oder kodu maszynowego. Dla dobrego, non-matematycznego wyjaśnienia parsowania Polecam parsowania Techniques - A Practical Guide. Wikipedia ma porównania generatorów parsera, z których można wybrać ten jeden, który jest odpowiedni dla Ciebie. W zależności od wybranego generatora parsera,

Napisanie parsera dla języka może być naprawdę ciężko, ale to zależy od gramatyki. Proponuję więc, aby utrzymać prostą gramatykę (w przeciwieństwie do C ++); Dobrym przykładem tego jest LISP.

W drugim etapie, drzewo składniowe przekształca się ze struktury drzewa w liniowe przedstawienie pośredniej. Jako dobry przykład tego kodu bajtowego Lua jest często cytowane. Ale reprezentacja pośredni naprawdę zależy od języka.

Jeśli budujesz tłumacza, będzie po prostu trzeba interpretować reprezentacji pośredniej. Można też po prostu na czas kompilacji go. Polecam LLVM i libjit dla just-in-time-kompilacji. Aby język użyteczny będzie trzeba także zawierać pewne funkcje wejścia i wyjścia, a może małe biblioteki standardowej.

Jeśli idziesz do kompilacji języka, będzie to bardziej skomplikowane. Trzeba będzie napisać backendów dla różnych architektur komputerowych i generowania kodu maszynowego z pośredniej reprezentacji w tych backendów. Polecam LLVM dla tego zadania.

Istnieje kilka książek na ten temat, ale mogę polecić żadnego z nich do ogólnego użytku. Większość z nich jest zbyt akademicki lub zbyt praktyczne. Nie ma „Naucz się pisać kompilatora w 21 dni”, a zatem trzeba będzie kupić kilka książek, aby uzyskać dobre zrozumienie tego całego tematu. Jeśli wyszukiwanie w Internecie, można natknąć się na kilka książek online oraz notatek. Może jest biblioteka uniwersytetu w pobliżu, gdzie można wypożyczać książki na kompilatorów.

Polecam również dobrej znajomości tła w teoretycznej informatyki i teorii grafów, jeśli masz zamiar zrobić projekt poważne. Stopień w informatyce będą również pomocne.

Odpowiedział 21/07/2009 o 11:37
źródło użytkownik

Odpowiedział 18/05/2010 o 00:38
źródło użytkownik

głosy
11

Jedna książka jeszcze nie zaproponował, ale bardzo ważne jest „Łączniki i ładowarki” John Levine. Jeśli nie używasz zewnętrznego asemblera, trzeba drogę do wyjścia plik obiekt, który może być połączony do końcowego programu. Nawet jeśli korzystasz z zewnętrznego asemblera, prawdopodobnie będziesz musiał zrozumieć delokalizacji i jak cały proces ładowania Program działa, aby narzędzie pracy. Książka ta zbiera wiele losowej lore wokół tego procesu dla różnych systemów, w tym Win32 i Linux.

Odpowiedział 18/08/2008 o 21:18
źródło użytkownik

głosy
10

Znalazłem książkę Smoka zbyt trudne do odczytania ze zbyt dużym naciskiem na teorii języka, który nie jest naprawdę wymagane napisać kompilator w praktyce.

Chciałbym dodać Oberon książkę, która zawiera pełną źródło niezwykle szybki i prosty Oberon kompilatora Projektu Oberon .

tekst alternatywny

Odpowiedział 09/08/2010 o 19:33
źródło użytkownik

głosy
10

Jeśli jesteś gotów użyć LLVM, to sprawdzić: http://llvm.org/docs/tutorial/ . Uczy, jak napisać od podstaw przy użyciu kompilatora LLVM ramy, a nie że masz żadnej wiedzy na ten temat.

Tutorial Proponuję napisać własne parsera i lexer etc, ale radzę zajrzeć do bizona i wyginać, gdy pojawi się ten pomysł. Robią życie o wiele łatwiejsze.

Odpowiedział 20/08/2008 o 11:01
źródło użytkownik

głosy
10

Smok Książka jest zdecydowanie „kompilatory budowlanych” książki, ale jeśli język nie jest tak skomplikowane, jak w obecnej generacji językach, można zajrzeć do wzorca Interpreter z wzorców projektowych .

Przykład w książce projektuje język wyrażeń regularnych podobny i jest dobrze przemyślane, ale jak to się mówi w książce, to jest dobre dla myślenia w procesie, ale jest naprawdę skuteczne tylko w małych językach. Jednak jest to znacznie szybciej napisać tłumacza dla małego języka z tego wzoru niż konieczności poznać wszystkie różne rodzaje parserów, yacc i lex, et cetera ...

Odpowiedział 05/08/2008 o 17:16
źródło użytkownik

głosy
9

Pamiętam, że tym pytaniem około siedmiu lat temu, kiedy byłem raczej nowy w programowaniu. Byłem bardzo ostrożny, kiedy poprosiłem i zaskakująco nie dostać jak najwięcej krytyki jak otrzymujesz tutaj. Oni jednak wskazać mnie w kierunku „ Smoka Book ”, która jest moim zdaniem, naprawdę wielki książki, która wyjaśnia wszystko, co trzeba wiedzieć, aby napisać kompilator (będziesz oczywiście musiał opanować język lub dwa. Tym bardziej, języki wiesz, tym lepiej.).

I tak, wiele osób twierdzi, że czytanie książki jest szalony i nie będzie dowiedzieć się czegoś od niego, ale nie zgadzam się całkowicie z tym.

Wiele osób również powiedzieć, że pisanie kompilatorów jest głupie i bezsensowne. Cóż, istnieje wiele powodów, dla których rozwój kompilator są użyteczne: - Bo to zabawa. - To edukacyjne, podczas nauki, jak pisać kompilatory dowiesz się wiele o informatyce i innych technik, które są przydatne przy pisaniu innych aplikacji. - Jeśli nikt nie napisał kompilatory istniejące języki nie będzie nic lepszego.

Nie miałem napisać własny kompilator od razu, ale po zapytaniu wiedziałem, od czego zacząć. A teraz, po zapoznaniu się wiele różnych języków i czyta książkę Smoka, pisanie nie jest wielkim problemem. (Ja też studiowanie inżynierii komputerowej atm, ale większość z tego, co wiem na temat programowania jest samoukiem).

Podsumowując: - Dragon Książka jest wielki „poradnik”. Ale spędzić trochę czasu na opanowanie języka lub dwa przed przystąpieniem do napisania kompilatora. Nie należy oczekiwać, aby być guru kompilator w ciągu następnej dekady lub tak chociaż.

Książka jest również dobra, jeśli chcesz dowiedzieć się, jak napisać parser / tłumaczy.

Odpowiedział 06/08/2009 o 23:37
źródło użytkownik

głosy
9

Szukam na tej samej koncepcji, i znaleźliśmy ten obiecujący artykuł Joel Pobar,

Tworzenie kompilator języka .NET Framework

omawia koncepcję wysokim poziomie kompilatora i zaczyna wymyślać własną langauge dla .NET Framework. Choć jego celem jest .Net Framework, wiele pojęć powinien móc być powielana. Artykuł ten obejmuje:

  1. definicja langauge
  2. skaner
  3. Parser (bit im głównie zainteresowany)
  4. Kierowanie .NET Ramowego
  5. Generator kodów

istnieją inne tematy, ale masz tylko.

Jest skierowany do osób rozpoczynających działalność, napisany w języku C # (nie całkiem Java)

HTH

kości

Odpowiedział 31/12/2008 o 00:01
źródło użytkownik

głosy
9

„... Budujmy kompilator ...”

Ja bym drugi http://compilers.iecc.com/crenshaw/ przez @sasb . Zapomnij o zakupie więcej książek w tej chwili.

Czemu? Narzędzia i język.

Wymagany jest język Pascal i jeśli dobrze pamiętam opiera się na Turbo-Pascal. To po prostu tak się dzieje, gdy idziesz do http://www.freepascal.org/ i pobrać kompilator Pascal wszystkie przykłady pracy prosto ze strony ~ http://www.freepascal.org/download.var Rzecz beaut o bezpłatny Pascal to można go używać niemal cokolwiek procesor lub OS można dbać.

Po opanowaniu lekcji następnie spróbować bardziej zaawansowanej Smoka Książka ~ http://en.wikipedia.org/wiki/Dragon_book

Odpowiedział 20/08/2008 o 12:28
źródło użytkownik

głosy
8

Z comp.compilers FAQ :

"Programowanie komputera osobistego" Per Brinch Hansen Prentice Hall 1982 ISBN 0-13-730283-5

To niestety zatytułowany książka wyjaśnia projektowania i tworzenia środowiska programowania pojedynczego użytkownika do Micros, używając Pascal-jak język o nazwie Edison. Autor przedstawia cały kod źródłowy i objaśnienia do wykonania krok po kroku kompilator Edison i prosty wspierającego systemu operacyjnego, wszystkie napisane w samej (z wyjątkiem małego jądra wspierającego napisany w asemblerze symbolicznego dla PDP 11/23 Edison, a kompletne źródło można również zamówić na IBM PC).

Najciekawsze rzeczy w tej książce są: 1) jego zdolność do wykazania, w jaki sposób stworzyć kompletne, samodzielne, samodzielne utrzymanie, przydatnych kompilatora i systemu operacyjnego, oraz 2) interesująca dyskusja języka projektowych i specyfikacji problemów i handlem offs w rozdziale 2.

"Brinch Hansen na kompilatory Pascala" Per Brinch Hansen Prentice Hall 1985 ISBN 0-13-083098-4

Innym światło na teorię here's-how-to-code-to książka ciężki na pragmatyki. Autor przedstawia projekt, realizacja i kompletny kod źródłowy kompilatora i p-code tłumacza Pascal- (Pascal „minus”), A Pascal podzbiór z typów logicznych i całkowitych (ale nie znaków, liczb rzeczywistych, subranged lub wymienione rodzaje) , stała i zmienna definicje i rodzaje tablic i zapisu (ale nie zapakowane, wariant, set, wskaźnik, bezimienne, przemianowane lub typów plików), wyrażenia, instrukcje przypisania, zagnieżdżone definicje Procedura z parametrów wartości i zmiennych, jeśli sprawozdania, natomiast sprawozdania, bloki i rozpocząć klasy (ale nie definicje funkcji, parametry procesowe, goto i etykiety, oświadczenia przypadku należy powtórzyć oświadczenia, do sprawozdania, a także z wypowiedzi).

Kompilator i interpreter są napisane w Pascalu * (Pascal „gwiazda”), a Pascal podzbioru rozszerzonego z niektórych funkcji Edison stylu tworzenia systemów programistycznych. Pascal * kompilator dla IBM PC sprzedawany przez autora, ale jest to łatwe do portu Pascal- kompilator książki na dowolnym dogodnym Pascal platformy.

Ta książka sprawia, że ​​projektowanie i implementacja kompilatora wyglądać proste. Szczególnie podoba mi się sposób, w jaki autor dotyczy jakości, niezawodności i testowania. Kompilator i interpreter mogą być łatwo wykorzystane jako podstawa dla języka lub kompilatora projektu bardziej zaangażowany, zwłaszcza jeśli wciśnięty, aby szybko dostać coś uruchomiony.

Odpowiedział 26/06/2010 o 21:17
źródło użytkownik

głosy
8

Należy sprawdzić „Darius Bacona ichbins ”, który jest kompilator dla małego Lisp dialekcie kierowania C, w ciągu zaledwie 6 stron kodu. Zaletą ma ponad większości zabawek kompilatorów jest to, że język jest na tyle kompletny, że kompilator jest w nim napisane. (Archiwum zawiera również tłumacza Bootstrap rzeczy).

Jest więcej rzeczy o tym, co znalazłem przydatny w nauce napisać kompilator na moim Ur-Scheme stronie internetowej.

Odpowiedział 05/10/2008 o 17:00
źródło użytkownik

głosy
8

Łatwym sposobem utworzenia kompilatora jest użycie Bison i Flex (lub podobne), zbudować drzewo (AST) i wygenerować kod w C z generowanie kodu C jest najważniejszym krokiem. Poprzez generowanie kodu C, język będzie automatycznie działać na wszystkich platformach, które mają kompilatora C.

Generowanie kodu C jest tak proste jak generowanie kodu HTML (wystarczy użyć drukowania lub równoważny), który z kolei jest o wiele łatwiejsze niż napisanie parsera C lub HTML parser.

Odpowiedział 20/08/2008 o 10:56
źródło użytkownik

głosy
7

Niestety, to jest po hiszpańsku, ale to jest bibliografia kursie o nazwie „Compiladores e interpretuje” (kompilatory i tłumaczy) w Argentynie.

Kurs był z teorii języków formalnych do kompilatora budowę, a są to tematy, które trzeba zbudować co najmniej prosty kompilator:

  • Kompilatory Design w C.
    Allen I. Holub

    Prentice Hall. 1990.

  • Compiladores. Teoria Y Construcción.
    Sanchís Llorca, FJ, Galán Pascual, C. Editorial PARANINFO. 1988.

  • Kompilator budowlana.
    Niklaus Wirth

    Addison-Wesley. 1996.

  • Lenguajes, Gramáticas Y Automatas. Un Enfoque práctico.
    Pedro Isasi Viñuela Paloma Martínez Fernández, Daniel Borrajo Millán. Addison-Wesley Iberoamericana (Spain). 1997.

  • Sztuka projektowania kompilatora. Teoria i praktyka.
    Thomas Pittman, James Peters.

    Prentice Hall. 1992.

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

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

    Addison-Wesley Iberoamericana. 1995.

  • Wprowadzenie do teorii automatów, języków i obliczeń.

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

  • Wprowadzenie do języków formalnych.
    György E. Révész.

    Mc Graw Hill. 1983.

  • Parsowania technik. Przewodnik praktyczny.
    Dick Grune, Cériel Jacobs.
    Impreso por los Autores. 1995
    http://www.cs.vu.nl/~dick/PTAPG.html

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

  • Lex: a Leksykalne analizatora generatora.
    ME Lesk E. Schmidt. Computing Science Raport Techniczny Nº 39, 1975. Bell Laboratories. Murray Hill, New Jersey.

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

  • Elementy teorii obliczeń.
    Harry R. Lewis, Christos Papadimitriou. Segunda Edición. Prentice Hall. 1998.

  • Un Algoritmo Eficiente para la Construcción del Grafo de dependencia de sterowania.
    Salvador V. Cavadini.
    Trabajo końcowe de Grado para Obtener EL Título de Ingeniero PL Computacion.
    Facultad de Matemática Aplicada. UCSE 2001.

Odpowiedział 25/04/2009 o 18:23
źródło użytkownik

głosy
7

Kompilator LCC ( wikipedia ) ( strona projektu ) od Fraser i Hanson jest opisany w książce „A zmiennocelowym kompilator C: Projektowanie i wdrażanie”. Jest to dość czytelne i wyjaśnia całą kompilator, aż do generowania kodu.

Odpowiedział 16/09/2008 o 17:21
źródło użytkownik

głosy
7

Python jest dostarczany wraz z kompilator Pythona napisany w Pythonie. Można zobaczyć kod źródłowy, i obejmuje wszystkie etapy, od analizowania, drzewo składniowe, kod emitującego itp Hack go.

Odpowiedział 12/08/2008 o 12:25
źródło użytkownik

głosy
6

Nie jest to książka, ale papier techniczny i ogromnie zabawne doświadczenie uczenia się, jeśli chcesz wiedzieć więcej o kompilatory (i metacompilers) ... Ta strona poprowadzi Cię przez budowanie całkowicie autonomiczny układ kompilatora, który można skompilować siebie i innych języków:

Tutorial: Metacompilers Część 1

To wszystko jest oparte na niesamowitym małym 10 stron papieru technicznego:

Val Schorre META II: składni-Oriented Compiler Pisanie Język

od szczery do Boga 1964. Dowiedziałem się, jak zbudować kompilatory z tego tyłu w roku 1970. Jest to oszałamiające chwila, kiedy wreszcie grok jak kompilator może regenerować się ....

Wiem, autor strony internetowej, z moich studiów, ale nie mam nic wspólnego z serwisu.

Odpowiedział 28/08/2009 o 01:01
źródło użytkownik

głosy
5
  1. Jest to rozległy temat. Nie lekceważ tego punktu. I nie lekceważ mojego punktu nie lekceważ go.
  2. Słyszałem, że smok Książka jest A (?) Miejsce, aby rozpocząć, wraz z wyszukiwarką. :) lepiej w poszukiwaniach, w końcu będzie to twoje życie.
  3. Budowa własnego języka programowania jest absolutnie dobre ćwiczenie! Ale wiem, że nigdy nie zostaną wykorzystane do celów praktycznych w końcu. Wyjątki od tej reguły są nieliczne i bardzo daleki.
Odpowiedział 20/07/2009 o 23:44
źródło użytkownik

głosy
5

Jeśli jesteś zainteresowany pisania kompilator dla języka funkcjonalnego (zamiast jednego procesowego) Simon Peyton-Jones i David Lester w „ Wdrażanie języki funkcjonalne: poradnik ” jest doskonałym przewodnikiem.

Koncepcyjne podstaw, jak funkcjonalnej oceny prac jest prowadzona przez przykłady w prosty, ale potężny język funkcjonalnego zwanego „Core”. Ponadto, każda część z kompilatora języka podstawowego wyjaśnione przykłady kodu w Miranda (czysty funkcjonalny język bardzo podobny do Haskell).

Kilka różnych typów kompilatory są opisane, ale nawet jeśli tylko za tzw szablonu kompilator Rdzenia masz doskonałe zrozumienie tego, co sprawia, funkcjonalny programowania kleszcza.

Odpowiedział 01/10/2008 o 10:30
źródło użytkownik

głosy
5

Jest wiele dobrych odpowiedzi tutaj, więc pomyślałem, że wystarczy dodać jeden do listy:

Mam książkę o nazwie Projekt Oberon ponad dekadę temu, który ma bardzo dobrze napisany tekst na kompilator. Książka naprawdę wyróżnia się w tym sensie, że źródłem i objaśnienia jest bardzo ręce na i czytelny. Pełny tekst (edycja 2005) został udostępniony w formacie PDF, dzięki czemu można pobrać już teraz. Kompilator omówiono w rozdziale 12:

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

Niklaus Wirth, Jürg Gutknecht

(Leczenie nie jest tak obszerna, jak jego książki o kompilatory)

Czytałem kilka książek na kompilatory i mogę drugi książka smok, czas spędzony na tej książki jest bardzo opłacalne.

Odpowiedział 19/09/2008 o 00:31
źródło użytkownik

głosy
4

Można użyć BCEL przez Apache Software Foundation. Za pomocą tego narzędzia można wygenerować kod asemblera podobny, ale z Java API BCEL. Można dowiedzieć się, jak można wygenerować kod języka pośredniego (w tym przypadku kodu bajtowego).

prosty przykład

  1. Tworzenie klasy Java z tej funkcji:

    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";
        }
    }
    

Teraz uruchom BCELifier z tej klasy

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

Można zobaczyć wynik na konsoli dla całej klasy (Jak zbudować kodu bajtowego MyClass.java). Kod dla funkcji jest następująca:

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();
}
Odpowiedział 14/07/2011 o 16:42
źródło użytkownik

głosy
4

Podobało mi się samouczek Crenshaw też, bo to sprawia, że absolutnie jasne, że kompilator jest tylko kolejny program, który odczytuje i zapisuje pewne wejście niektóre obecnie wprowadzone.

Przeczytaj to.

Pracować, jeśli chcesz, ale wtedy spojrzeć na innego odniesienia, jak większe i bardziej kompletne kompilatory są naprawdę napisane.

I czytać ufność zaufania , aby uzyskać pojęcia o nieoczywistych rzeczy, które można zrobić w tej dziedzinie.

Odpowiedział 22/08/2008 o 16:57
źródło użytkownik

głosy
3

Nieuwzględnione w wykazie jakim jest ta książka:

Podstawy Compiler Design (Torben Mogensen) (od dept. Informatyki, Uniwersytet w Kopenhadze)

Jestem również zainteresowany poznawaniem kompilatorów i planuje wejść na ten sektor w ciągu najbliższych kilku lat. Ta książka jest idealna książka teoria uczenia się rozpocząć kompilatory miarę widzę. To nic nie kosztuje, aby kopiować i powielać, czysto i starannie napisane i daje ci to w prostym języku angielskim, bez kodu, ale nadal prezentuje mechanikę drodze instrukcji i schematów itp Warto zobaczyć imo.

Odpowiedział 12/03/2014 o 17:05
źródło użytkownik

głosy
3

Brakuje z listy: Garbage Collection: Algorytmy Automatic Dynamiczne zarządzanie pamięcią, przez Jones i Lins.

(Zakładając, że piszesz do kompilatora i systemu wykonawczego, i że jesteś wdrażania śmieci zbierane język.

Odpowiedział 27/06/2010 o 00:43
źródło użytkownik

głosy
3

Pisałem samouczek elektroniczny na temat projektowania kompilatora, zatytułowany „Zbudujmy skryptów silnika kompilator, a także rodzimych kompilator kodu o nazwie Bxbasm Online doc są pod adresem:. Http://geocities.com/blunt_axe_basic/tutor/Bxb- Tutor.doc

Dokumenty, pliki pomocnicze i kompilator, w formie zip, są: http://geocities.com/blunt_axe_basic

Też: http://tech.groups.yahoo.com/group/QDepartment

Steve A.

Odpowiedział 13/01/2009 o 23:31
źródło użytkownik

głosy
3

Smok książka jest zbyt skomplikowana. Więc ignorować go jako punktu wyjścia. Jest to dobry i sprawia, że ​​dużo że kiedy masz już punkt wyjścia, ale na początek, być może należy po prostu spróbować napisać oceniającego matematyka / wyrażenie logiczne przy użyciu Rd, LL lub LR parsowania technik ze wszystkiego (Lexing / parsowania) pisemne ręcznie w być może C / Java. To jest interesująca sama w sobie i daje wyobrażenie o problemach związanych z kompilatora. Następnie można przejść do swojego DSL przy użyciu jakiegoś języka skryptowego (od przetwarzania tekstu jest zwykle łatwiejsze w nich) i jak ktoś powiedział, generowanie kodu w obu języka skryptowego sama lub C. Należy prawdopodobnie używać Flex / bizony / antlr etc zrobić Lexing / parsowania jeśli masz zamiar to zrobić w c / Java.

Odpowiedział 01/10/2008 o 21:24
źródło użytkownik

głosy
2

Dziwię się, że nie zostało wspomniane, ale Donald Knuth za Sztuka programowania został napisany jako swego rodzaju samouczek na piśmie kompilatora.

Oczywiście, skłonność Dr. Knuth za zamiar pogłębione na tematy doprowadziło do samouczka kompilator pisania rozbudowywana dla około 9 tomach, z których tylko trzy zostały faktycznie opublikowany. Jest to raczej pełna ekspozycja na tematy programowania i obejmuje wszystko, czego kiedykolwiek trzeba wiedzieć o napisanie kompilatora, w najdrobniejszych szczegółach.

Odpowiedział 21/07/2009 o 01:20
źródło użytkownik

głosy
2

Jako punkt wyjścia, to będzie dobre, aby utworzyć zejście rekurencyjne parsera (RDP) (powiedzmy chcesz stworzyć swój własny smak BASIC i zbudować interpreter BASIC), aby zrozumieć, jak napisać kompilatora. Uważam, że najlepsze informacje Herberta Schild Użytkowników C Zasilanie, rozdział 7. Niniejszy rozdział odnosi się do innej książki H. Schildt „C Kompletny Reference”, w którym wyjaśnia, jak stworzyć prosty kalkulator (a parsera wyrażenie). Znalazłem obie książki na eBay bardzo tanie. Można sprawdzić kod dla tej książki, jeśli przejdziesz do www.osborne.com lub sprawdzić w www.HerbSchildt.com znalazłem ten sam kod, ale dla C # w swojej najnowszej książce

Odpowiedział 20/08/2008 o 12:16
źródło użytkownik

głosy
1

Jeśli nie jesteś po prostu patrząc na książki, ale również zainteresowani stron internetowych, które mają artykuły na ten temat, mam blogu o różnych aspektach tworzenia języka programowania. Większość stanowisk można znaleźć w moim blogu w kategorii „język zamiaru” .

W szczególności, omówię generowanie kodu maszynowego Intel ręcznie, maszynowo lub automatycznego generowania kodu bajtowego, tworząc interpreter kodu bajtowego, pisanie czas pracy obiektowego, tworząc prostą ładowarkę i pisania prostych znak / zamiatania śmieci kolektor. Wszystko to w bardzo praktyczny i pragmatyczny sposób zamiast nudne cię z dużą ilością teorii.

Ceniłaby opinię o nich.

Odpowiedział 02/04/2014 o 13:39
źródło użytkownik

głosy
1

Najszybszym sposobem jest za pośrednictwem dwóch książek:

1990 wersja Wprowadzenie do technik kompilacji, kurs pierwszej używając ANSI C, Lex i Yacc JP Bennett - doskonałą równowagę przykładowy kod, analizowania teorii i Design to zawiera kompletny kompilator napisany w C, lex i yacc dla prosta gramatyka

Smok Book (starsza wersja) - głównie szczegółowym odniesieniem do cech nieobjętych w dawnej książki

Odpowiedział 01/04/2011 o 20:39
źródło użytkownik

głosy
1

Ilekroć chcesz wypróbować nowy pomysł językowy, po prostu napisać prosty parser, a nie generować jakiś język, który jest łatwo dostać się do dobrych kompilatorów, jak C.

Jak myślisz, C ++ zostało zrobione?

Odpowiedział 21/07/2009 o 01:42
źródło użytkownik

głosy
1

Jeśli tak jak ja, który nie ma formalnego wykształcenia informatyka, i jest zainteresowany w budynku / chce wiedzieć, jak działa kompilator:

Ja polecam „Programowanie procesorów językowe w Java: kompilatorów i tłumacze”, niesamowita książka dla samouka programista komputerowy.

Z mojego punktu widzenia, zrozumienie tych podstawowych teorii języka, zautomatyzować maszynę, a teoria zestaw nie jest duży problem. Problemem jest to, jak włączyć te rzeczy w kodzie. Powyższa książka powie Ci jak napisać parser, kontekst analizy i generowania kodu. Jeśli nie można zrozumieć tę książkę, to muszę powiedzieć, zrezygnować budowę kompilatora. Książka jest najlepsza książka programowania, jaką kiedykolwiek czytałem.

Jest inna książka, również dobre, Compiler Design w C . Jest dużo kodu, i to mówi wszystko o tym, jak zbudować kompilator i Lexer narzędzi.

Budowanie kompilator jest zabawa praktyka programowania i można nauczyć się mnóstwo umiejętności programistycznych.

Nie kupuj książki Smoka . To była strata czasu i pieniędzy i nie jest dla lekarza.

Odpowiedział 05/02/2009 o 03:55
źródło użytkownik

głosy
0
  • Zacznij od upewniając się, można odpowiedzieć na większość pytań oznaczonych C ++ tutaj na przepełnienie stosu.
  • Po tym, należy upewnić się, że rozumiesz jak działają inne kompilatory i zrozumieć [części] ich kod źródłowy.
  • Zauważysz trzeba asemblera i rozpocznie naukę asemblera aż można odpowiedzieć na wiele pytań z tym tagiem.
  • Jeśli już tak daleko, przekonasz się, że kilka lat minęło i uświadomić sobie, jak wielka jest taki projekt i ewentualnie uśmiech na własne pytanie z powrotem następnie (jeśli ta strona nadal istnieje w tym czasie) ...
Odpowiedział 21/07/2009 o 00:01
źródło użytkownik

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