Ameisen23 hat geschrieben:@puretom
Das solltest du aber machen sonst ist das ein sehr schlechter, unsauberen Programmierstil. Und hauptsächlich globale Variablen zu nutzen geht garnicht.
Wenn du das und andere Sachen nicht lernst, dann wirst du für immer ein Anfänger bleiben!
Deine Meinung! Ich respektiere das.
Aber als Anfänger würde ich mich grad nicht bezeichnen, eventuell als bereits ein bisschen fortgeschritteren Anfänger
.
Bei
dieser Art Compiler-Aufbau sollte man aber einige (aber nicht hauptsächlich) globale Variablen nutzen (
du kennst den Code, auf den wir uns beziehen?)!
Im Gegenteil: Mein Code nutzt eigentlich sogar hauptsächlich lokale Variablen, ein recursive descent parser lebt vom impliziten Stack, der durch die Lokalität von Variablen in Prozeduren entsteht. Das ist ja gerade diese spezielle Parse-Technik, die so einfach und bestechend genial ist
.
Es gibt wesentliche Designmerkmale, die diese Art Compiler und VM/Emulator wesentlich definieren, da gehören ein globaler Look, ein globales Lexem und ein globales Token z.B. dazu.
Auch globale Datenstrukturen, wie die Stacks in einer Virtual Machine, sind als lokale Arrays ausgeführt weshalb wozu gut? Ja, man könnte auf 'Shared' jedesmal gehen, wozu? Der Stack einer CPU ist für ihn global, man könnte das Array versuchen, ByRef mit Pointern zu übergeben, wozu?
(Zu Info: Andere Compiler-Versionen von mir hatten das zum Teil)
Das ist ein Grund-Designmerkmal und nicht zu ändern, ohne umständlich zu werden. Und warum umständlich, wenn es einfach (Crenshaw --> Kiss-Philosophie) auch geht - mein Tutorial-Ziel.
Hier Parameter - z.B. bei Lexem oder Token oder Look oder ein File-Handle - umherzuschicken, das machen nicht mal Leute wie Wirth oder lese ich auch nicht im Drachenbuch, die
diese Art von Compiler ja quasi erfunden haben. Es gibt freilich modernere objektorientierte Designs, oder welche mit Bäumen uvm. Aber
ich will bewusst diese Art Compiler-Aufbau dem Forum näherbringen, zumal ich von den anderen selbst keine Ahnung habe.
Pure Basic ist auch nicht objektorientiert, wobei ich der Objektorientierung insgesamt nicht so viel abgewinnen kann (wenngleich ich Grunderfahrungen in C# habe), drum programmiere ich ja auch nach wie vor Basic als Hobbyist, aber das ist auch nicht der Punkt. Bitte jetzt keine Diskussionen über pro und kontra Objektorientierung, da machen wir einen neuen Flame-Thread auf!
Aber ich möchte dich herzlich einladen, meinen Compiler vollständig auf lokale Variablen umzuprogrammieren. Ich bin dankbar für jeden brauchbaren Vorschlag.
Aber wie gesagt, es ist der
Wirth-Crenshaw-Varanese-Dragon-Book-recursive-descent-parser-Ansatz (gibt es dieses Wort überhaupt?
), den ich VERSUCHE, dem Forum auf Deutsch, auf meinem Anfängerniveau näherzubringen.
Nach wie vor ist aber die Vorgabe, ihn für Laien verständlich zu halten, es wird ja ein Tutorial und keine kommerzielle Release-Version!
Aber über Fragen des Programmierstils zu diskutieren, ist interessant, denn jeder hat seinen Stil, und seine Meinung! Man könnte ganze Flame-Schlachten führen!
Liebe Grüße, puretom