Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Wie funzt ein Compiler?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Ecki



Anmeldungsdatum: 28.06.2006
Beiträge: 121

BeitragVerfasst am: 17.07.2006, 22:25    Titel: Wie funzt ein Compiler? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 17.07.2006, 22:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 17.07.2006, 23:07    Titel: Antworten mit Zitat

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... durchgeknallt
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 18.07.2006, 10:12    Titel: Antworten mit Zitat

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
Code:
SubFoo(Parameter)

wird
Code:
Push Parameter
call SubFoo

(ich weiss, ich konkretten Beispiel würde der Pointer Gepusht, aber das ist komplexer zu erklären zwinkern )

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Ecki



Anmeldungsdatum: 28.06.2006
Beiträge: 121

BeitragVerfasst am: 18.07.2006, 12:20    Titel: Antworten mit Zitat

Vielen danke für die Infos! lächeln
Werd ich mir gleich nschauen... grinsen
_________________
MFG,
Infection 93
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 18.07.2006, 13:12    Titel: Antworten mit Zitat

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ß! mit den Augen rollen

/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. lächeln
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 18.07.2006, 17:11    Titel: Antworten mit Zitat

*klatsch seb eine* Zunge rausstrecken

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Ecki



Anmeldungsdatum: 28.06.2006
Beiträge: 121

BeitragVerfasst am: 18.07.2006, 21:17    Titel: Antworten mit Zitat

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). Kopf schütteln

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. verwundert
_________________
MFG,
Infection 93
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
marzec



Anmeldungsdatum: 13.10.2004
Beiträge: 267

BeitragVerfasst am: 18.07.2006, 21:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Ecki



Anmeldungsdatum: 28.06.2006
Beiträge: 121

BeitragVerfasst am: 18.07.2006, 21:52    Titel: Antworten mit Zitat

Schreibt man Compiler normalerweise nicht in ASM?
_________________
MFG,
Infection 93
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.07.2006, 22:23    Titel: Antworten mit Zitat

ne, tut mabn nicht unbedingt lächeln 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ecki



Anmeldungsdatum: 28.06.2006
Beiträge: 121

BeitragVerfasst am: 18.07.2006, 22:31    Titel: Antworten mit Zitat

Nein, mein Vater hat an der Uni ASM für 386er studiert (aber fast niergendswo eingesetzt Zunge rausstrecken ) 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 ( happy )
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Stephan



Anmeldungsdatum: 05.10.2004
Beiträge: 358
Wohnort: Hessen - 20km Nördlich von Frankfurt am Main

BeitragVerfasst am: 18.07.2006, 22:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 19.07.2006, 09:17    Titel: Antworten mit Zitat

Ecki hat Folgendes geschrieben:
Nein, mein Vater hat an der Uni ASM für 386er studiert (aber fast niergendswo eingesetzt Zunge rausstrecken ) 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 ( happy )
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 durchgeknallt .
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 zwinkern , 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz