Compiler ähnliches Programm. Brauche Hilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PyBeginner
User
Beiträge: 19
Registriert: Sonntag 7. Juli 2013, 12:45

Hallo,
nachdem ich nun über Grundkenntnisse in Python verfüge, möchte ich ein Programm schreiben, das für mich nicht gerade einfach zu schreiben ist :wink:
Ich bin mir nicht sicher ob man das noch Compiler nennen kann (ich kenn jetzt die genaue Definition nicht, aber ich wüsste nicht, wie ich es ohne riesige Umschreibungen nennen sollte.).

Jedenfalls mag ich BASIC, da das besonders für Einsteiger sehr einfach zu erlernen ist.
Ich hab mir ein paar Anweisungen überlegt, die meine eigene kleine, BASIC ähnliche Sprache bilden.
Nun möchte ich ein Programm schreiben, das erst eine .txt Datei öffnet und mit readline() Anweisungen liest und dann den Code meiner Sprache in Python/PyGame Code übersetzt und speichert diesen in einer anderen .txt oder .py Datei.

Ich hab nur mal angefangen, aber komme auf ein Problem:
Sobald eine Variable gesetzt wird oder ein Bild geladen wird, muss ich den Befehl um eine Variable zu setzen, von dem Namen der Variable und den Wert, den die Variable bekommt, unterschieden werden...
Dasselbe gilt auch, wenn man ein Bild laden will.

Ich habe bisher leider keine Lösung dafür gefunden. Kann Python z.B. nur die ersten 5 Buchstaben lesen, dann die nächsten bis man ein = vorfindet (wird als Variable gesetzt) und dann den Rest (Wert, der der Variable zugewiesen wird).

Vielleicht ist das ganze noch eine Nummer zu groß, aber dennoch möchte ich das unbedingt ausprobieren, auch wenns viel zu schwer ist :wink:
Ich hoffe ihr könnt mir helfen.
Danke im Voraus für jegliche Hilfe!
BlackJack

@PyBeginner: Das was Du machen möchtest passt zum Begriff „Compiler”.

Du gehst das aber wohl etwas zu simpel an. Normalerweise definiert man eine Grammatik die die Syntax der zu kompilierenden Sprache beschreibt. Dann schreibt man einen Parser der diese Syntax in eine Struktur im Speicher übersetzt, die sich abstrakter Syntaxbaum („abstract syntax tree”, AST) übersetzt. Und für diese Struktur schreibt man dann Code der sie in die Zielsprache überführt.

Da gehört ein wenig Theorie dazu als Grundlage, reguläre Ausdrücke, kontextfreie Grammatiken, und so weiter.
PyBeginner
User
Beiträge: 19
Registriert: Sonntag 7. Juli 2013, 12:45

@BlackJack
Danke für deine Antwort erstmal :)
Also ist es doch komplizierter als gedacht...
War ja irgendwie klar :wink:

Wie sollte ich das ganze dann angehen?
Wie schreibt man so einen Parser (nur vom Grundgerüst her)?
Und wie kann ich das Problem mit den Variablen lösen?

Bisher wollte ich es so machen:

BASIC_Main = open('BASIC_Main.txt')
PyGame_Main = open('PyGame_Main.txt')
Zeile1 = BASIC_Main.readline()
Zeile2 = BASIC_Main.readline()
und so weiter
und dann z.B.:
If Zeile 1 == Anweisung:
Dann schreibe Text in .txt Datei

Gibts eventuell Links oder sowas, die den Aufbau oder die Herangehensweise erläutern?
Bin momentan irgendwie Hilflos...

Danke im Voraus :)
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

PyBeginner hat geschrieben:Gibts eventuell Links oder sowas, die den Aufbau oder die Herangehensweise erläutern?
So lange du Variablennamen durchnummerierst kann man dich eigentlich nur auf das Tutorial verweisen, wo du sinnvollere Datenstrukturen kennen lernen wirst.

Es gibt natürlich passende Fachliteratur zum Thema, aber du könntest dir ja erst einmal einen Überblick verschaffen und mit dem einfachen Wikipedia Artikel zum Abstract Syntax Tree anfangen.
PyBeginner
User
Beiträge: 19
Registriert: Sonntag 7. Juli 2013, 12:45

Danke :)
Werd die Links gleichmal ausprobieren.
Für Python speziell gibt's keine Tutorials, oder?

Oh und noch eine Frage:
Kann man in Python Wörter von Wörtern abziehen? Man kann ja zwei Wörter in Python zusammenzählen z.B. Haus + Tür = HausTür rechnen. Kann man z.B. HausTür - Tür = Haus rechnen?
BlackJack

@PyBeginner: Man kann nicht mit Wörtern rechnen. Man kann Zeichenketten konkatenieren und dazu reagieren Zeichenketten ”zufällig” auf den gleichen Operator. Und ``-`` ist auf Zeichenketten nicht definiert, wie man leicht feststellen kann:

Code: Alles auswählen

In [1]: 'HausTür' - 'Tür'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-18823b4b99a5> in <module>()
----> 1 'HausTür' - 'Tür'

TypeError: unsupported operand type(s) for -: 'str' and 'str'
Die Operation die Du beschreibst, kann man natürlich selber, zum Beispiel als Funktion definieren.
PyBeginner
User
Beiträge: 19
Registriert: Sonntag 7. Juli 2013, 12:45

Hm, ok, schade.
Danke für deine Antwort.

Nun ja, ich such im Internet mal nach Tutorials.
Falls jemand einen Link zu einem Tutorial hat, wäre ich natührlich sehr dankbar.
Benutzeravatar
darktrym
User
Beiträge: 785
Registriert: Freitag 24. April 2009, 09:26

Schau dir mal sma's Video an, nachdem du ein Python Tutorial durch hast.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
darktrym
User
Beiträge: 785
Registriert: Freitag 24. April 2009, 09:26

Hier gibts eine kurze Einführung in Compilerbau in Python.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
PyBeginner
User
Beiträge: 19
Registriert: Sonntag 7. Juli 2013, 12:45

Danke für die beiden Links :D
Hab im Moment keine Zeit, aber ich werd mir das in jedem Fall mal ansehen :)
Antworten