# Workshop - Compilerbau für Anfänger und Programmierer



## jkallup (10. August 2010)

Hallo Liebe Tutorials User,

wer hat Lust bzw. Interesse sich in das Thema Compilerbau einzuarbeiten?
Geboten wird ein oder mehrere Workshop's zum Thema Compilerbau.
Im Workshop des 1. Teils wird ein Taschenrechner erarbeitet.
Auf Wunsch können wir echten Assembler OutputCode für 486er PC's erstellen, um so eigenständige Programme zu erstellen.
Die Grundlage wird Delphi bzw. FPC (FreePascalCompiler) Pascal Code dienen mit Compiler Tools wie zum Beispiel YACC/LEX um das ganze zu vereinfachen.
In einen weiteren Teil wird eine Sprache erstellt, die geparst wird.
mit IF ELSE ENDIF und FOR ENDFOR Schleifen.

Bitte meldet Euch und sagt Wünsche im Anschluß auf diesen Thread.
Mfg
Jens


----------



## Matt297 (10. August 2010)

Hi, in welcher Form hast du dir den Workshop vorgestellt, also alles ausschließlich in digitaler Form(tutorials.de, Skype...) oder eventuell anders?

Gruß
Matt


----------



## zerix (10. August 2010)

*Workshop - Compilerbau für Anfänger ...*

Na ich bin dabei. 

Gruß 

Sascha


----------



## jkallup (11. August 2010)

Hallo Matt,

der Workshop wird Live und für User/Nutzer des tutorials.de Forum/Hemeinschaft kostenos mit der gewphnten AdobeConnect Software über das Internet abgehalten.
Alles was Du brauchst ist eine scgbelle Internetanbindung und den FlashPlayer.
Als Einstiegsprogramm wird ein Taschenrechner erarbeitet, nicht etwa ein Programm bei dem man Buttona klicken wird, sondern eine Textdatei geparst (d.h. übersetzt wird).
Dabei wird nicht nur 2 + 3 gerechnet, sondern auch 2 + 3 * 4   (=14 also Punkt vor Strichrechnung beachtet.
Als 2. Teil wird eine bestehende Sprache erarbeitet, die es erlaubt Texte auszugeben und evtl.  wenn es die Zeit zulässt Kontrollstrukturen behandelt werden.
Hierfür wird dann assembler verwendet, der einfach halber in der Form eines Kellerautomaten also nur sowas wie push oder ein wenig floaz point instructions.
Ich versuche alles Anfängerfreundlich zu gestalten
An Programmen kömmen natürlich nur kostenlose zur Anwendung.
so zum Beispiel der FPC, yacc/lex von Albert Gräf, der gcc und nasm 32 bit gggf lazarus/delphi

Gruß
Jens


----------



## Dragosani (11. August 2010)

Gründsätzlich hätte ich daran durchaus interesse. Wäre klasse, wenn man bei dem Workshop darauf achten würde, dass es ausserhalb von normalen Office-Zeiten liegt


----------



## jkallup (11. August 2010)

klar, habe den Admins, die die Plattform zur Verfügung stellen vorgeschlagen, das ganze am Wochende zu machen oder dann halt in der Woche ab 18 Uhr ,,,,


----------



## ComFreek (11. August 2010)

Ich hätte auch Interesse, obwohl ich mich nicht mit Delphi & Co. auskenne.
Ich wollte schon immer einen Compiler bauen


----------



## Dragosani (11. August 2010)

jkallup hat gesagt.:


> klar, habe den Admins, die die Plattform zur Verfügung stellen vorgeschlagen, das ganze am Wochende zu machen oder dann halt in der Woche ab 18 Uhr ,,,,


Sehr gut 


ComFreek hat gesagt.:


> Ich hätte auch Interesse, obwohl ich mich nicht mit Delphi & Co. auskenne.
> Ich wollte schon immer einen Compiler bauen


Geht mir auch so, Delphi/Pascal ist nicht meine Welt, aber einen Compiler würde ich auch gern mal testen.


----------



## Matt297 (11. August 2010)

Hey gut, dann bin ich auch dabei.


----------



## stonetech (11. August 2010)

Hallo allerseits,

bin auch dabei, wollte schon immer wissen wie so was geht.


----------



## jkallup (11. August 2010)

Hallo,

wer dann Lust und Laune hat, der kann dann bei meinen gegenwärtigen Projekt mitmachen.
Dort geht es dann darum die dBL Sprache mit ide und compiler umzusetzen.,
d.h. ich versuche ein Team zu bilden.
wer also mitmachen will und sich erstmal die Grundlagen anschauen will ist herzlichst eingeladen.

Gruß
Jens


----------



## Bgag (11. August 2010)

Ich fände es ehrlich gesagt auch spannender, wenn die Compiler mit C oder C++ implementiert würden, da ich keinen Plan von Pascal und Delphi habe, wobei das auch nicht wirklich ein Problem darstellen dürfte. So stark unterscheiden sich die meisten Sprachen ja nun nicht.

Besonders interessant fände ich in Bezug auf die mathematischen Ausdrücke noch die Verarbeitung und Organisation von Variablen und Funktionen, wie zum Beispiel sin(), sqrt() oder fac().

Liebe Grüße,

Andreas


----------



## zerix (12. August 2010)

*Workshop - Compilerbau für Anfänger ...*

Ich werd mir mal deinen Workshop anschauen, vielleicht mache ich dann bei deinem Projekt mit. 

Gruß

Sascha


----------



## jkallup (12. August 2010)

Hallo Avedo,

Deinen Wunsch können wir (ich) gerne nachkommen. Mal sehen ob das mit der Zeit hinkommt und ich ich genügend Ressourcen bekomme.
habe mir das so vorgestellt, das der Compiler in Pascal geschrieben wird, der dann nasm Assembler produziert, der auf eine C/C++ DLL zugreift, wo die Funktionen drin szehen.
Somit wird Einblick in Pascal, Assembler, C/C++ und die Erstellung von DLL mittels dem gcc gegeben/vorgestellt.
Dabei gehe ich auf die Plattform Vista 32Bit aus mit dem MingW GCC Compiler und Tools.

Gruß
Jens


----------



## ComFreek (12. August 2010)

Avedo hat gesagt.:


> Ich fände es ehrlich gesagt auch spannender, wenn die Compiler mit C oder C++ implementiert würden, da ich keinen Plan von Pascal und Delphi habe, wobei das auch nicht wirklich ein Problem darstellen dürfte. So stark unterscheiden sich die meisten Sprachen ja nun nicht.


Zum Teil auch, weil Windows mit C programmiert ist. Aber ich denke der Schwerpunkt liegt darin, einen Quelltext in Assembler umzuwandeln. Aber wenn's mit C und C++ implementiert würde, dann würde ich mich natürlich freuen.


----------



## zerix (12. August 2010)

Ich denke mal an den Ressourcen wird es nicht liegen, da wirst du genug Zeit haben, falls du den Connect-Raum meinst.

C/C++ wäre mir natürlich auch lieber. ;-)

Gruß

Sascha

EDIT: Du solltest vielleicht auch noch eine Liste hier einstellen, welche Software benötigt wird, mit Links wo man sie beziehen kann. So gibt es zu deinem Workshop keine Probleme und alle sollten schon vorbereitet sein.


----------



## jkallup (12. August 2010)

Hallo,

leider habe ich mich schon auf Pascal eingestellt. Der einfachhalt halber habe ich vor, einige Klassen, die Delphi/Lazarus Pascal zur Verfügung stellen zu nutzen.
Darunter fallen zum Beispiel die Nutzung der Klasse TStringGrid, um Variablen, bzw. Funktionen zu händeln.
Es dürfte aber sicherlich keine Schwierigkeiten für den fortgeschrittenen Programmierer sein, die gleichen Klassen selbst zu implementieren. - Ist halt eine Gewöhnungssache von mir die doch durchaus guten Turbo Klassen zu nutzen, da sie sehr einfach sind..

Ein kleines Beispiel:

*var
  FMyStringListe: TStringList;
begin
  FMyStringListe := TStringList.Create;
  ....
  FMyStringListe.Add('push 1');
  FMyStringListe.Add('call _function');
  ....
  FMyStringListe.SaveToFile('output.asm');
  FMyStringListe.Free;
end;*

StringListen haben den Vorteil, das diese so gross werden können wie Speicher vorhanden ist.
Strings hingegen nur 255 Zeichen lang sein können bzw. sollten.
Klar man könnte dann auf AnsiString umsatteln aber der weitere Vorteil von StringListen ist, das man unter Pascal Objekte mit speichern kann, oder vielmehr Pointer auf Objekte. Und das macht es gerade interessant, da man schnell nach diesen Objekt(namen) suchen kann - siehe Variablen und Funktionen.

Gruß
Jens


----------



## zerix (12. August 2010)

Ich sagte, dass es mir lieber wäre, nicht dass es sein muss. ;-)

Gruß

Sascha


----------



## jkallup (12. August 2010)

Hallo Sascha,

ja klar, da hast Du recht, hier mal eine Liste mit Links:
auf alle Fälle wird  ein Pascal Compiler benötigt, vortzgsweise kann das der

FPC - FreePascalCompiler sein, der hier gesaugt werden kann:
http://www.freepascal.org/download.var

dann wird noch der NASM benötigt:
http://sourceforge.net/projects/nasm/

der MinGW GCC (eigentlich nur fürs binden der exe'n benötigt)::
http://sourceforge.net/projects/mingw/files/

sowie das Yacc/Lex package von Albert Gräfe:
unten bei Free Software:
http://www.musikwissenschaft.uni-mainz.de/~ag/ag.html

für die Darstellung einer GUI habe ich das Qt-Framework gewählt, da dieses sehr einfach ist:
http://qt.nokia.com/products/

das dürfte es erstmal sein, wenn nochwas fehlt füge ich es der Liste an.

Gruß
Jens


----------



## ComFreek (12. August 2010)

Nein, muss nicht sein, aber ich denke man kann sich bei den oben genannten Befehlen schon was denken, wie:


```
var
FMyStringListe: TStringList; // Objekt von Klasse TStringList deklarieren
begin
FMyStringListe := TStringList.Create;  // Speicher für das Objekt reservieren
....
FMyStringListe.Add('push 1');              // Wert hinzufügen
FMyStringListe.Add('call _function');    // Wert hinzufügen
....
FMyStringListe.SaveToFile('output.asm');   // Als Assembler Datei speichern
FMyStringListe.Free;                            // Reservierten Speicher freigeben
end;
```

*Edit: So ein Pech. Ich habe seit einigen Wochen das Arbeiten mit dem wxWidgets-GUI-Framework angefangen. Und jetzt kommt Qt. *

*EDIT2: Gibt es keinen Free-Pascal-Compiler für AMD64 Windows Vista 32-Bit?*


----------



## jkallup (12. August 2010)

> *EDIT2: Gibt es keinen Free-Pascal-Compiler für AMD64 Windows Vista 32-Bit?*


 
müsste hier zu saugen sein:
http://wiki.freepascal.org/Win64_for_AMD64


----------



## ComFreek (12. August 2010)

Aber ich habe Windows Vista *32-Bit*. (Also ich habe Win32 installiert, obwohl ich eigentlich Win64 installieren könnte, aber nunja ich habe 32)


----------



## jkallup (12. August 2010)

macht doch nix, hab auch nur win vista 32 Bit


----------



## ComFreek (12. August 2010)

Offtopic: Sorry, aber muss ich mir jetzt den Sourcecode runterladen und kompilieren?  Die Links auf der Seite funktionieren nicht.


----------



## jkallup (12. August 2010)

ne,

ftp://gd.tuwien.ac.at/languages/pascal/fpc/dist/2.4.0/i386-win32/fpc-2.4.0.i386-win32.exe


----------



## ComFreek (12. August 2010)

Danke. Ich hatte bereits das installiert (während ich die Frage schrieb), doch dann habe ich es wieder deinstalliert, um das Setup bei deinem Link zu installieren. Obwohl es das gleiche war


----------



## ComFreek (15. August 2010)

jkallup hat hier einen neuen Thread aufgemacht.

*Darin sollen sich alle melden, die mitmachen wollen*


----------



## jkallup (16. August 2010)

Hallo,

an Alle, die sich schon gemeldet haben, hier ist ein neuer Thread, in dem Ihr Euch eintragen könnt, ob es was wird, 28.8.2010 (Samstag) 18:00 Uhr, an dem Ihr am Workshop Teilnehmen wollt/könnt:

http://www.tutorials.de/coders-talk/364994-compiler-workshop-am-28-8-2010-um-18-00-uhr.html


----------



## mrbela (9. April 2012)

Hey Leute,

ich bin auf diesen Thread durch google gestoßen und hab ne Frage bzgl. Compilern.

Kennt jmd ein Forum von Euch, das sich mit dem Bau/der Theorie von Compilern beschäftigt****

Über eine Antwort wäre ich sehr dankbar!

Liebe Grüße


----------



## sheel (9. April 2012)

Glaube nicht, dass es ein Forum nur speziell fur Compilerbau gibt.
Da muss man auf unspezifischere Sachen
(wie hier zB. die Programmiersprache oder Coders Talk) ausweichen.


----------



## jkallup (10. April 2012)

Hallo mrbela,

Danke das Du hier nachfragst!
Bezüglich Compilerbau wollte ich schonmal einen Workshop halten, der aber nach hinten gelaufen ist, weil ich meine Freundinn gerade an diesen Tag bei mir hatte und Sie mich förmlich vom Computer gerissen hat.
Müsste mal nachgeholt werden.
Wenn Du Fragen hast kannst Du Sie gerne Stellen.
Für Compilerbau empfehle ich Dir das Drachenbuch Teil 1 und Teil 2 zu besorgen.
Da hast Du schonmal ein wenig Lesestoff - aber den Titel bzw. das Buch wird nicht mehr gedruckt, so müsstest Du mal bei amazon auf gebraucht umsehen.
Aber Vorsicht! Die meisten Bücher oder Tuts sind so akademisch gehalten, das nen Normalo nicht mehr durchblick.
Ich kann Dir daher nur praktische Hilfe anbieten, Theorie ist da ein wenig im Hintergrund.
Bin ja kein Mathematiker, einfacher Programmieranwender.
Oder Du suchst im Internet nach Flex und Bison/Yacc.
Mit welcher Programmiersprache dann Du einen Compiler schreiben willst gibt es verschiedene Tools Pascal, C, C++ , ....
Bin gerade an einen Compilerprojekt, von daher ....

Also bis dann ...


----------



## Thomas Darimont (10. April 2012)

Hallo,

ich kann dir nur die deutsche Übersetzung des "Drachenbuchs" empfehlen:
Compiler. Prinzipien, Techniken und Tools (Pearson Studium): Prinzipien, Techniken und Werkzeuge [Gebundene Ausgabe]:
http://www.amazon.de/Compiler-Prinz...0973/ref=sr_1_3?ie=UTF8&qid=1334067702&sr=8-3
... dort steht IMHO alles drin, was man zum Thema Compilerbau wissen sollte.

Hier das englische "original":
http://www.amazon.de/Compilers-Prin...s=books-intl-de&ie=UTF8&qid=1334067829&sr=1-4

Siehe auch:
http://en.wikipedia.org/wiki/Principles_of_Compiler_Design

Ansonsten gibt google: compilerbau skript auch einiges her:
https://www.google.de/#hl=de&sclien...f.,cf.osb&fp=ccf813f5941eac3&biw=1278&bih=963

Gruß Tom


----------



## jkallup (21. April 2012)

Hallo,

ich habe mich entschlossen, einen Compilerworksshop nachzuholen.
Nach mehrfacher Nachfrage, werde ich diesen int C/C++ und zusätzlichen Tools bereit stellen.
Wenn nix außergewöhnliches passieren solltet Ihr Euch den

Donnerstag, 10.05.12  18 Uhr vormerken******

Was wird geboten? :
* Einstieg in die Compilerbau-Technik für "Laien/Anfänger" (vorerst kein AST-Thema vorgesehen!)
* Erstellung von x386er 32-Bit CPU Assembler
* Erstellung von "kleinst" ExEcutables
* Erstellung von DLL/Programmen mit Hilfe von Nokias, Qt-Framework (C/C++)
* Erstellung eines "kleinst" - Compilers (einfache Symbolfindung und Handling)
* Abschließend die Erstellung eines Plug-In's für Eigene Spiele/Anwendungen

Freue mich auf Euer kommen
jkallup


----------



## ComFreek (22. April 2012)

Sehr gut! Möchte auf jeden Fall dabei sein.

Aber was heißt "kleinst"?


----------



## jkallup (22. April 2012)

Hallo ComFreek,

mit kleinst meinte ich minimale Vor- und Endresultate.
So könnte zum Beispiel der Befehl/Compiler:
PRINT "Hallo"

eine ExEcutable erzeugen, dessen Größe < 4096 Byte liegt, also in ein normales Sektor reinpasst.
Testcases haben bei mir eine ExE von 2048 Bytes ergeben.
Man stelle sich vor, man hat ein Projekt im Visier und es passt auf eine Diskette 
AMIGA 500 lebe hoch 
ne Spass
Aber mal im Ernst, wie viel Daten werden heute verbraten, Code mehrfach genutzt und der Arbeitsspeicher sinkt langsam auf NULL....


----------



## jkallup (1. Mai 2012)

für Anregungen bin ich natürlich immer aufgeschlossen....


----------

