| Autor |
Beitrag |
Koj
      
Beiträge: 16
Delphi 2005 Pers., Lazarus, NASM, FASM, VB 2005 EpressEdition
|
Verfasst: Fr 09.05.08 21:46
Hi,
ich bin dabei, eine eigene Programmiersprache in Delphi zu schreiben. Der Anfang befindet sich im Anhang.
Wenn ich an die Funktion "translate" als Parameter "hw|hw" übergebe, kommt als ausgabe:
org 100h
___start___:
HW
HWHW
die ersten 3 Zeilen sind ja auch richtig, aber in der letzten ist ein HW zu viel.
Kann mir jemand Helfen?
P.S.: In meinem Quellcode sind einige showmessage-Aufrufe, die lediglich zum Debugging dienten, also nicht beachtet werden müssen.
MfG koj
Moderiert von AXMD: "Brauche dringend Hilfe" aus Titel entfernt - jeder braucht hier Hilfe
Einloggen, um Attachments anzusehen!
|
|
huuuuuh
      
Beiträge: 665
Erhaltene Danke: 19
win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
|
Verfasst: Fr 09.05.08 23:03
warum willst du ne eigene prgrammiersprche entwickeln? 
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Sa 10.05.08 07:37
Ich würde mich mal mit Interpreter / Kompilerbau beschäftigen. So wird das nix.
_________________ Na denn, dann. Bis dann, denn.
|
|
Koj 
      
Beiträge: 16
Delphi 2005 Pers., Lazarus, NASM, FASM, VB 2005 EpressEdition
|
Verfasst: Sa 10.05.08 13:08
huuuuuh hat folgendes geschrieben: | warum willst du ne eigene prgrammiersprche entwickeln?  |
Ich bin am Schülerrechenzentrum ( srz.tu-dresden.de). Jeder Schüler muss eine Jahresarbeit machen, ich hab mir eben rausgesucht, eine Programmiersprache zu schreiben.
alzaimar hat folgendes geschrieben: | | Ich würde mich mal mit Interpreter / Kompilerbau beschäftigen. So wird das nix. |
Mir ist das zu kompliziert.
Außerdem hab ich nicht mehr viel Zeit, um mich nochmal damit zu beschäftigen.
oder kennt jemand eine sehr vesrtändliche Anleitung zum Compilerbau in Delphi/Pascal?
Moderiert von AXMD: Beiträge zusammengefügt
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 10.05.08 13:27
Wie wäre es mit dem "Report on the Programming Language Modula-2" von Nikolaus Wirth, dem Vater von Pascal?
AXMD
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Sa 10.05.08 13:28
Koj hat folgendes geschrieben: | | Jeder Schüler muss eine Jahresarbeit machen, ich hab mir eben rausgesucht, eine Programmiersprache zu schreiben. |
ich vermute mal, dass es eine Skript-Sprache (und eine einfache noch dazu) sein soll, sonst hätte dich dein Lehrer ziemlich auflaufen lassen  Also so was wie einen Mathe-Parser.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Koj 
      
Beiträge: 16
Delphi 2005 Pers., Lazarus, NASM, FASM, VB 2005 EpressEdition
|
Verfasst: Sa 10.05.08 13:38
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 10.05.08 13:53
Hi,
Ich habe mir deinen Quelltext mal teilweise angeschaut und an dieser Stelle gestockt: 1: 2: 3: 4: 5: 6:
| case PatternPtr^ of #0: begin result := StringPtr^ = #0; if result or (StringRes=nil) or (PatternRes=nil) then Exit; |
Edit: Ups ich habe mich verlesen und "PatternStr^" und "StringPtr^für dasselbe Wort gehalten. Bitte auch selbsterklärende Bezeichner verwenden.
mfG,
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Zuletzt bearbeitet von Hidden am Sa 10.05.08 13:56, insgesamt 1-mal bearbeitet
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 10.05.08 13:54
AXMD hat folgendes geschrieben: | | Wie wäre es mit dem "Report on the Programming Language Modula-2" von Nikolaus Wirth, dem Vater von Pascal? |
Hast du dir das schon angesehen?
AXMD
|
|
Koj 
      
Beiträge: 16
Delphi 2005 Pers., Lazarus, NASM, FASM, VB 2005 EpressEdition
|
Verfasst: Sa 10.05.08 13:56
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Sa 10.05.08 13:59
Koj hat folgendes geschrieben: | | Ja, aber hilft mir nicht so richtig. |
Inwiefern? Das beschreibt genau das, was du machen willst und ist zudem relativ ausführlich erklärt.
AXMD
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 10.05.08 14:02
Koj hat folgendes geschrieben: | | die split-Funktion ist nicht von mir, deshalb hab ich sie auch so gelassen, wie sie war. |
dein Code ist trotzdem voller Breaks und Exits. Das wird definitiv nicht gut kommen. (Oder habt ihr das etwa so gelernt  In dem Fall müsstest du mal mit denem Lehrer reden  ).
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Koj 
      
Beiträge: 16
Delphi 2005 Pers., Lazarus, NASM, FASM, VB 2005 EpressEdition
|
Verfasst: Sa 10.05.08 14:10
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Sa 10.05.08 14:25
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
|
|
Koj 
      
Beiträge: 16
Delphi 2005 Pers., Lazarus, NASM, FASM, VB 2005 EpressEdition
|
Verfasst: Sa 10.05.08 14:30
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Sa 10.05.08 14:31
Was hast du denn gehört? Seit wann darf man keine Ablaufkontrolle mehr verwenden?
Goto ist ja ok (auch wenn ich da auch anderer Meinung bin), aber ich bitte dich, übertrieben muss man es ja nicht...
Und ja, der Fehler liegt woanders. Ich lad mir mal die Sourcen runter... auch wenn ich sowas ungern mache.
EDIT: Hilfe
Also, freundlicher Hinweis hierhin: wiki.delphigl.com/in...criptsprachen_Teil_1
Ich würde einfach mal vermuten, dass deine Patterns falsch sind. *|* matcht auch auf a|b|c|d|e...
Und wenn du hier weiter machen willst: denk dir tunlichst ne andere Syntax aus. ASM in ASM übersetzen bringt erstens nix, und ist 2. auch nicht wirklich ne Herausforderung. Auch wenn ein Templater drin ist...
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Koj 
      
Beiträge: 16
Delphi 2005 Pers., Lazarus, NASM, FASM, VB 2005 EpressEdition
|
Verfasst: Sa 10.05.08 14:48
Martok hat folgendes geschrieben: | Was hast du denn gehört? Seit wann darf man keine Ablaufkontrolle mehr verwenden?
Goto ist ja ok (auch wenn ich da auch anderer Meinung bin), aber ich bitte dich, übertrieben muss man es ja nicht...
Und ja, der Fehler liegt woanders. Ich lad mir mal die Sourcen runter... auch wenn ich sowas ungern mache.
EDIT: Hilfe
Also, freundlicher Hinweis hierhin: wiki.delphigl.com/in...criptsprachen_Teil_1
Ich würde einfach mal vermuten, dass deine Patterns falsch sind. *|* matcht auch auf a|b|c|d|e...
Und wenn du hier weiter machen willst: denk dir tunlichst ne andere Syntax aus. ASM in ASM übersetzen bringt erstens nix, und ist 2. auch nicht wirklich ne Herausforderung. Auch wenn ein Templater drin ist... |
der Link ist zwar gut, aber ich darf ja nicht alles übernehmen, ich muss ja mein Programm selber schreiben.
Warum sind die Patterns falsch?
Ein "|" soll einfach nur mehrere Anweisungen mit einander verbinden.
P.S.: Es kommt auch die Ausgabe:
org 100h
___start___:
HW
HWHW
wenn ich das eingebe:
hw<Zeilenumbruch>
hw
Leute!
Ich glaube das Problem liegt entweder in lesedateiinhalt() oder leseiniwert().
Ich hab die translate-Funktion jetzt so abgeändert:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| function translate(code:string):string; var zeilen,woerter,zz:TStringArray; z:integer; asmcode,errors:string; begin errors:=''; asmcode:=lesedateiinhalt(lib_verzeichnis+leseiniwert('anfang')); zeilen:=Split(code,#13#10); for z:=low(zeilen) to high(zeilen) do begin if not(like(zeilen[z],'*|*'))then begin woerter:=split(zeilen[z],' '); if like(woerter[low(woerter)],'//*')then else if lowercase(woerter[low(woerter)])='hw' then asmcode:=asmcode+#13#10+'Hier kommen die Hello-World-Befehle hin.' else errors:=errors+#13#10'Unbekannter Befehl: Z '+inttostr(z+1); end else begin zz:=split(zeilen[z],'|'); asmcode:=asmcode+#13#10+translate2(stringarray2string(zz,#13#10)); end; end; if errors<>'' then result:='~ERRORS~:'+errors else result:=asmcode; end; |
Danke für Eure Hilfe.
Ich poste den Code, wenn das Programm fertig ist.
Moderiert von AXMD: Beiträge zusammengefügt
|
|
|