AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte HQ9+fuck Interpreter
Thema durchsuchen
Ansicht
Themen-Optionen

HQ9+fuck Interpreter

Ein Thema von FAlter · begonnen am 16. Jan 2010 · letzter Beitrag vom 4. Feb 2015
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von FAlter
FAlter
Registriert seit: 21. Jul 2004
Hi,

ich habe mal schnell einen Interpreter für die Sprache HQ9+fuck zusammengezimmert. Er ist sehr quick&dirty.

HQ9+fuck ist eine Kombination der Programmiersprachen HQ9+ und brainfuck, welche die Vorteile beider vereint.

Der Interpreter ist ein Konsolenprogramm, an welches man den Namen der Textdatei (ASCII-Codierung) als Parameter übergibt, welche den Sourcecode enthält.

Im Anhang finden sich vorcompilierte Programme für Windows (x86 32 und 64 Bit) und Linux (x86 32 Bit), Beispielprogramme und eine Readme-Datei inklusive Erklärung der HQ9+fuck Sprache.

Der Interpreter ist auch teilweise Kompatibel zu reinen HQ9+ oder Brainfuck Programmen.
Brainfuck-Programme dürfen keine Zeichen H, Q oder 9 (in Kommentaren) enthalten oder sie müssen mit dem Schalter -bf gestartet werden. Sollten sie eine bestimmte Wortgröße erfordern, so muss der entsprechende Schalter angegeben werden.
HQ9+ Programme müssen in Großbuchstaben geschrieben sein (also nicht h oder q), da HQ9+fuck case-sensitiv ist (und natürlich dürfen sie auch keines der Zeichen -<>,.[] enthalten die aus Brainfuck entwendet wurden).

Das Programm steht unter der GPL.

Changelog:
Code:
[b]0.0.3[/b] - Eingabemethode ist schaltbar[list][*]Bei Problemen kann die Eingabenethode per -key umgestellt werden.[*]Vergesst die 0.0.2, jetzt das gleiche anders gelöst[*]FPC StdErr statt ErrOutput verwendet (letztere besteht angeblich nur aus Kompatibilität zu Delphi)[*]Exitcode / Errorlevel jetzt ohne den bekloppten halt Befehl[/list]
[b]0.0.2[/b] - Eingabe per ReadKey?[list][*]Jetzt ist es auch möglich (und im Standard so gemacht), beim compilieren ReadKey statt read zum Einlesen einer Eingabe zu nutzen. Leider funktioniert damit das Umleiten der Standardeingabe nicht mehr richtig oder so :-([/list]
[b]0.0.1[/b] - Speed![list][*]Grundlegende Designüberarbeitung: Der Interpreter interpretiert nun Bytecode (bzw. ein Array), welcher von einem Compiler erzeugt wird[*]Erarbeitung eines Konzepts für Optimierungen --> mehr Speed![*]Errorlevels teilweise dokumentiert[*]neue undokumentierte Parameter[*]Kompatibilitätsmodus für reine Brainfuck-Programme[/list]
[b]0.0.0[/b] - Kompatibilität[list][*] Jetzt werden auch verschachtelte Schleifen unterstützt[*]Kompatibilitätsmodi für 7, 8, 16 und 32 Bit[*]Gibt Errorlevels zurück (bisher undokumentiert)[*]verbesserte Fehlerbehandlung[*]...[/list][b]<kannte keine Versionsnummer>[/b]
Erste Veröffentlichung
Gruß
FAlter

[edit] Mein 1000. gezählter Beitrag! Ist ja passend dass ich genau da mit einer neuen Programmiersprache ankomme. [/edit]
Miniaturansicht angehängter Grafiken
beitrag1000_675.jpg  
Angehängte Dateien
Dateityp: zip hq9_fuck_162.zip (364,8 KB, 40x aufgerufen)
 
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#11
  Alt 21. Jan 2010, 20:37
ich laß grad seit 'ner Weile 'ne modifizierte Version des "kleinen" Mandelbrotbildchen berechnen
aber schon erstaunlich, was man mit 8 Bit alles hinbekommt
Miniaturansicht angehängter Grafiken
unbenannt_110.png  
Angehängte Dateien
Dateityp: exe mandelbrot_-_text2image_149.exe (157,5 KB, 6x aufgerufen)
Dateityp: txt mandelbrot_187.txt (11,6 KB, 7x aufgerufen)
Dateityp: txt mandelbrot_-_you_must_be_crazy_436.txt (11,9 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

 
Delphi 10.2 Tokyo Starter
 
#12
  Alt 21. Jan 2010, 20:54
Verdammt, warn mich doch for das das nicht HQ9+fuck kompatibel ist. In dem crazy code kommen 9en vor und ich krieg immer wieder 99 bottles of beer. Bin schon ganz nicht dass ich gleich muss.

Nun, habe jetzt die 9en durch (nine) ersdetzt... und probier es mal im 7 bit Modus laufen zu lassen.

Gruß
FAlter
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
 
#13
  Alt 21. Jan 2010, 20:56
*hust* Freaks.. *hust*

米斯蘭迪爾
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#14
  Alt 21. Jan 2010, 20:56
Tschuldschung ... vergiß die Hs und Qs nicht

hab noch ein Bild oben angehägt
und das ist zumindestens ein 8-Bit-Code ... bin mal gespannt, was bei bei 7 rauskommt.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

 
Delphi 10.2 Tokyo Starter
 
#15
  Alt 22. Jan 2010, 08:33
Er rechnet immer noch...
Miniaturansicht angehängter Grafiken
untitled_880.png  
Felix Alter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#16
  Alt 22. Jan 2010, 08:38
Hätte den PC heute Nacht (um besser schlafen zu können) nicht nur auf Sparflamme laufen lassen sollen,
aber wer konnte denn Ahnen, daß es so lange dauert.

Aber die Auflösung ist doch schon beachtlich und mit viel mehr Zeit, wäre noch etwas mehr möglich
und das nur mit ein paar 8-Bit-Berechnungen.

[add]
Und noch was genial Einfaches oder einfach Geniales?
Miniaturansicht angehängter Grafiken
mandelbrot_-_text2image_561.png  
Angehängte Dateien
Dateityp: txt numwarp_676.txt (1,3 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

 
Delphi XE2 Professional
 
#17
  Alt 22. Jan 2010, 11:35


BF und die Ausgabe in ein Image? Oder hab ich was falsch verstanden?
Marc
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

 
Delphi 10.2 Tokyo Professional
 
#18
  Alt 22. Jan 2010, 12:03
Zitat von divBy0:


BF und die Ausgabe in ein Image? Oder hab ich was falsch verstanden?
Soweit ich das verstanden habe, hat himitsu ein Programm geschrieben welches das Text-Mandelbrot in ein Bild-Mandelbrot konvertiert.. Bin mir aber nicht sicher.
Alternativ könnte man (oder ich habs falsch verstanden und es wird tatsächlich so gemacht) die Standard-Ausgabe auch in eine Datei umleiten und Pixel für Pixel schreiben. (Der Bitmap Header ist mal ein anderes Thema )
Michael
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

 
Delphi XE2 Professional
 
#19
  Alt 22. Jan 2010, 12:42
Aber das konvertieren dauert ja nicht so lange...

Oder es läuft ein BF Programm und die Ausgabe sind dann Pixel und werden in das Image gezeichnet.
Marc
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

 
Delphi 12 Athens
 
#20
  Alt 22. Jan 2010, 14:13
Also das BF-Programm erzeugt ein Bild in Form von Text (A-Z),
dazu hab ich mir ein Programm geschrieben (in Delphi), welches diesen Text in ein Bitmap übersetzt.
- A bis Z als Intensität und das Leerzeichen, bzw. alles Andere als ganz Schwarz.

Beitrag #11
> mandelbrot.txt = BF-Programm
> Mandelbrot - Text2Image.exe = der Converter

Der Converter ist auch nix Besonderes:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
  i, i2: Integer;
  S: String;
begin
  Memo1.Hide; Button1.Hide; CheckBox1.Hide;
  SL := TStringList.Create;
  SL.Text := Memo1.Text;
  i2 := 0;
  for i := SL.Count - 1 downto 0 do
    if Trim(SL[i]) = 'then SL.Delete(i)
    else i2 := Max(Length(Trim(SL[i])), i2);
  with Image1.Picture.Bitmap do begin
    Width := i2;
    Height := SL.Count * 2;
    Canvas.Brush.Color := clBlack;
    Canvas.FillRect(Rect(0, 0, Width, Height));
    for i := Height div 2 - 1 downto 0 do begin
      S := SL[i];
      for i2 := Width - 1 downto 0 do
        if (i2 < Length(S)) and (S[i2 + 1] in ['A'..'Z']) then begin
          Canvas.Pixels[i2, i * 2] := (Ord(S[i2 + 1]) - Ord('@')) * 255 div 26 * $010101;
          Canvas.Pixels[i2, i * 2 + 1] := Canvas.Pixels[i2, i * 2];
        end;
    end;
    if CheckBox1.Checked then SaveToFile(ChangeFileExt(ParamStr(0), '.bmp'));
  end;
  SL.Free;
end;

Aber theoretisch wäre es möglich das Bitmap auch direkt in BF zu erzeugen und abzuspeichern.


Dieses BF-Programm erzeugt z.B. in der Standardausgabe ein Datei, welche man direkt als .COM abspeichern lassen sollte.
Diese .COM wiederrum ist ein 8-Bit-BF-Interpreter, mit welchem man ein BF-Programm "abspielen" kann.

Quasi das Henne-Ei-Problem, denn was war nun zuerst da?
> das BF-Programm, welches die .COM erzeugt
> oder die .COM, welche das BF-Programm verarbeiten kann



Aber Einiges kann ich schonmal sagen:
- ein BF-Programm zu schreiben ist relativ leicht, wenn man einmal verstanden hat, wie's geht
- dabei hilfreich ist auch der geringe Sprachumfang, von nur 6 Befehlen
- aber die Speicherverwaltung ist ein Akt
- man muß sich genau überlegen was man wie wo ablegt, um
> möglichst geringe Wege und und damit auch wenig/übersichtlichen Code zu erzeugen

Ein kleiner Fehler am Anfang (z.B. eine Variable/Speicherstelle vergessen und schon darf man womöglich das halbe Programm umschreiben.

Also ich kann es jedem nur empfehlen ... man lernt ganz neue Denkweisen, welche bestimmt auch in Delphi gut anzuwenden sind.
Angehängte Dateien
Dateityp: txt bf8_423.txt (2,3 KB, 4x aufgerufen)
Dateityp: txt bf8-interpreter_source_488.txt (27,6 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz