 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Ecki
Anmeldungsdatum: 28.06.2006 Beiträge: 121
|
Verfasst am: 17.07.2006, 22:25 Titel: Wie funzt ein Compiler? |
|
|
Also wie ein Compiler funzt weiss ich schon, aber
wie soll man einen Compiler schreiben? Wie programmiert man das Compileren ein? _________________ MFG,
Infection 93 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 17.07.2006, 22:34 Titel: |
|
|
Frag doch mal v1ctor..
..aber am Besten über http://freebasic.ne/forum
dort liest er nämlich gerne und oft..
Aber schreib auf englisch..
A propos, wenn du englisch kannst, findeste dort im Forum auch Beiträge zum Thema Interpreter..
Ansonsten brauchste 'n Editor und 'n Compiler..
(Achso 'n Konzept brauchste auch noch..)
Bedenke: Der FreeBASIC-Compiler ist in FreeBASIC geschrieben..
Quellcode vom Compiler und der RTL läßt sich hier downloaden..
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO..
Zuletzt bearbeitet von ytwinky am 17.07.2006, 23:08, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 17.07.2006, 23:07 Titel: |
|
|
Ohne jetzt so ganz viel Ahnung vom Thema zu haben, kann ich dir schon mal die entsprechenden Wikipedia-Artikel empfehlen. Ansonsten hilft google auch weiter. Desweiteren gibt es eine Schar von Büchern zum Thema, käuflich zu erwerben z.B. bei amazon.de oder einer Buchhandlung deines Vertrauens.
Im Groben funktioniert ein Compiler so:
1) Parsen des Scripts, Auswertung der Befehle usw.
2) Generieren von ASM-Code (Mnemonics)
3) Assemblieren des ASM-Codes
An die Informatikstudenten hier: Nicht auf mich einschlagen, wenn ich das zu stümperhaft erklärt hab...  _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 18.07.2006, 10:12 Titel: |
|
|
So viel ich weiss, gibt es ganz verschiedene Arten einen Compiler zuschreiben.
Aber mal konkret:
So wie ich FreeBasic kenne, ist das Konzept ziemlich simpel.
Freebasic lösst die Subroutinen und Funktionsaufrüfe (auch Freebasic Befehle sind nix anderes als Subroutinen und Funktionsaufrüfe) anders um.
Einfach ausgedrückt:
Aus
wird
Code: | Push Parameter
call SubFoo |
(ich weiss, ich konkretten Beispiel würde der Pointer Gepusht, aber das ist komplexer zu erklären )
Irgedwo hier gibt es ein Thread wo ich es genauer zerlegt habe, ich such in Raus.
Edit://
So, da ist ja die zerlege Orgie:
Link _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
Ecki
Anmeldungsdatum: 28.06.2006 Beiträge: 121
|
Verfasst am: 18.07.2006, 12:20 Titel: |
|
|
Vielen danke für die Infos!
Werd ich mir gleich nschauen...  _________________ MFG,
Infection 93 |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 18.07.2006, 13:12 Titel: |
|
|
Dann gibt's auch noch den Vorgang der Optimierung und Fehlersuche des Compilers im zu compilierenden QC (Bereichsgrenzen überprüfen, Typenüberprüfung, ...)... Viel Spaß!
/edit:
Ansonsten kannst du auch mal marzec fragen, ich glaub, der hat mal was in der Richtung gemacht. Soweit ich weiß, hat der Compiler dann am Ende Intermediate Code ausgespuckt, inwieweit dir das helfen kann - k.A.  _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
marzec
Anmeldungsdatum: 13.10.2004 Beiträge: 267
|
Verfasst am: 18.07.2006, 17:11 Titel: |
|
|
*klatsch seb eine*
compiler != source -> asm
compiler sind in mehrere stages unterteilt:
+ syntactic analysis ( lexen + parsen, ast aufbaun )
+ semantic analysis ( typenüberprüfung, coercian etc. etc. )
+ optimization ( dead code elimination, constant propagation, common subexpressions, etc. etc. ) sowohl auf intermediate code als auch auf machine code ebene möglich daher nicht fix an dieser stelle...
+ code generation ( ast -> intermediate code, meist dann auch noch intermediate code -> machine code )
lexen: ist ein kinderspiel, siehe etwaige lexer generatoren ( jflex, lex etc. ). kann über reguläre ausdrücke recht leicht implementiert werden, tokenized then sourcecode ( tokenizen == sourcecode in tokens ( "wörter" ) zerlegen )
parsen: kann kopfzerbrechen machen je nach verwendeten tools ( selbst parser schreiben ( meist nur ll(k)? parser compiler verwenden ( antlr, yacc, javacc etc. )? )
ast: abstract syntax tree, baumdarstellung des sourcecodes, ideal zum traversieren und gruppieren von sourcecode teilen, bzw. zum auflösen von expressions etc. wird beim parsen erzeugt. ast design teilweise aufwändig
typenüberprüfung: je nach implementierter sprache simple bis komplex
coercian: relativ simple, kann per table implementiert werden ( == implizites casten von einen datentypen auf einen anderen )
ast -> intermediate code: sehr simples 1:1 mapping, quasi linearisieren des baums in simple sprache ( meist ähnlich assembler, siehe 3 adress code etc. )
intermediate code -> assembler: meist nicht wirklich aufgabe des compilers. siehe gcc, gibt ein eigenes backend, d.h. compiler ( c, c++, fortran pipapo ) spucken im code aus füttern diesen ans backend das wiederum den code für die zugrundeliegende plattform auspuckt. v1ctor versucht das grade ( und wird scheitern heh... )
wen es interessiert: www.ist.tugraz.at/courses/cb da gibts einiges an material zum thema, den ( schrecklichen ) c compiler den ich vor einem jahr geschrieben hab ( tutlinge mussten den heuer auf c++ erweitern haha... ). auch zu haben ist ein pascal compiler ( siehe 2004 )
zu empfehlen ist das klassische dragon book ( compiler theory and practice iirc )
und fb ist *kein* gutes paradebeispiel für einen compiler. interne struktur ist schrecklich und ich empfehle niemanden sich dort dinge abzuschaun. _________________ Yagl - yet another gameprogramming library |
|
Nach oben |
|
 |
Ecki
Anmeldungsdatum: 28.06.2006 Beiträge: 121
|
Verfasst am: 18.07.2006, 21:17 Titel: |
|
|
Marzec hat Folgendes geschrieben: | und fb ist *kein* gutes paradebeispiel für einen compiler. interne struktur ist schrecklich und ich empfehle niemanden sich dort dinge abzuschaun. |
Hab's schon mal gemacht und 0,00% kapiert. Der FBC ist wirklich auf deutsch gesagt - scheisse - geschrieben (unsauberer Code).
Gibts irgendwo eine Compiler-Demo; sowas wie ein Programm, dass eine EXE erstellt, in die man zB "say 'Hello World!'" eintippt und diese dann "HelloWorld!" ausgibt? Also ein Compiler, der nur vielleicht ein Progchen machen kann, dass nur etwas sagen muss.  _________________ MFG,
Infection 93 |
|
Nach oben |
|
 |
marzec
Anmeldungsdatum: 13.10.2004 Beiträge: 267
|
Verfasst am: 18.07.2006, 21:41 Titel: |
|
|
du unterschätzt den aufwand zu sehr. mein mini c compiler hat ca. 7000 zeilen code ( kommentare mitgerechnet zufinden auf der ist seite oben ). und der kann nicht besonders viel ( subset von c, keine arrays, nur char, int, float, functions, pointer, stdcall, cdecl ).
wenn du einen compiler basteln willst wirst du um das lesen von theoretischer literatur kaum herumkommen.
edit: fb und qb sind für die ersten gehversuche in diesem bereich auch mehr als ungeeignet. java + javacc bzw. java + antlr sind da um welten besser. _________________ Yagl - yet another gameprogramming library |
|
Nach oben |
|
 |
Ecki
Anmeldungsdatum: 28.06.2006 Beiträge: 121
|
Verfasst am: 18.07.2006, 21:52 Titel: |
|
|
Schreibt man Compiler normalerweise nicht in ASM? _________________ MFG,
Infection 93 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.07.2006, 22:23 Titel: |
|
|
ne, tut mabn nicht unbedingt wär auch wohl zu umständlich... wenn du meinst, dass der compiler nur in ASM schnell wäre: es kommt ja drauf an, was er ausspuckt, nicht, woraus er besteht! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Ecki
Anmeldungsdatum: 28.06.2006 Beiträge: 121
|
Verfasst am: 18.07.2006, 22:31 Titel: |
|
|
Nein, mein Vater hat an der Uni ASM für 386er studiert (aber fast niergendswo eingesetzt ) und hat mir aus Erfahrung gesagt, dass ohne ASM der Compiler wirklich langsam wäre und dass in Assemblersprache die "Compilation" sehr schnell gehen würde.
Inzwischen habe ich gehört, dass Compiler auch in C/C++, BASIC ( )
und sonstwas geschrieben werden.
[Offtopic]
Wie kann man denn einen Compiler schreiben, der nicht mal 1k groß ist???
(Ich meine Brainfuck)
Ist Brainfuck Open-Source? _________________ MFG,
Infection 93 |
|
Nach oben |
|
 |
Stephan

Anmeldungsdatum: 05.10.2004 Beiträge: 358 Wohnort: Hessen - 20km Nördlich von Frankfurt am Main
|
Verfasst am: 18.07.2006, 22:53 Titel: |
|
|
Also worin ein Compiler geschrieben ist,spielt doch mal überhaupt keine rolle,
selbst ein in QBasic geschriebener Compiler kann auch schnell sein.
(Durch Optimierung)
Aber das Kompilat selbst hat doch mit dem Compiler nichts mehr zu tun. _________________ 'Wir schätzen die Zeit erst, wenn uns nicht mehr viel davon geblieben ist.'
Leo Tolstoi |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 19.07.2006, 09:17 Titel: |
|
|
Ecki hat Folgendes geschrieben: | Nein, mein Vater hat an der Uni ASM für 386er studiert (aber fast niergendswo eingesetzt ) und hat mir aus Erfahrung gesagt, dass ohne ASM der Compiler wirklich langsam wäre und dass in Assemblersprache die "Compilation" sehr schnell gehen würde.
Inzwischen habe ich gehört, dass Compiler auch in C/C++, BASIC ( )
und sonstwas geschrieben werden.
[Offtopic]
Wie kann man denn einen Compiler schreiben, der nicht mal 1k groß ist???
(Ich meine Brainfuck)
Ist Brainfuck Open-Source? |
Old School Know How ...
Die heutigen Compiler werden im "langsamer" weil sie immer stärker versuchen den Code zu optimieren.
Viele Compiler sind sogenannt selbst complierent.
Beispielsweise der GNU C Compiler oder auch Freebasic.
Das heisst, immer eine alte Compiler Version compiliert die neue, die sich dann nach her nochmal selbst compiliert .
Das hat einen grossen Vorteil: Wenn der Compiler sich nicht selbst Compiliert, ist irgendwas verbockt. Eine einfache und effiziente Qualitätssicherung.
Nochmal zurück zum "in ASM" Programmieren: die GNU Compiler Collection wurde bewusst in einer Hochsprache geschrieben, um mehrere Zielarchitekturen versorgen zu können. Zudem profitiert der Compiler von jedem Zeitaufwendigen Optimierungsalgoritmus selbst, weil er sich wie gesagt selbst kompiliert.
Übrigens:
Nicht immer ist Hand geschriebener ASM-Code schneller, wenn ein mässiger ASM Programmierer gegen einen Hochgezüchteten/Hochentwickelten Compiler antritt wie die GNU Compiler Collection oder, das ist aber etwas Unfair , den Intel C++ Compiler, hat der Compiler gute Chancen als Gewinner hervor zugehen. _________________ http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|