Entwickler-Ecke
Sonstiges (Delphi) - Übersetzung aus Oberon
Johannes Maier - Di 12.10.04 20:35
Titel: Übersetzung aus Oberon
Hi,
ich habe ein Problem bei der Übersetzung eines Oberon-Codeabschnittes in Delphi. Dieser hier ist es:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| IMPORT Viewers, Texts, TextFrames, Oberon; . . VAR R: Texts.Reader; W: Texts.Writer; . . PROCEDURE error(n: INTEGER); VAR pos: LONGINT; BEGIN pos := Texts.Pos(R); IF pos > lastpos+2 THEN Texts.WriteString(W, " pos"); Texts.WriteInt(W, pos, 6); Texts.WriteString(W, " err"); Texts.WriteInt(W, n, 4); lastpos := pos; Texts.WriteString(W, " sym"); Texts.WriteInt(W, sy, 4); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) END END error; |
Dieses Reader und Writer Zeug ist das Problem ... Die gibt es zwar in Delphi auch, aber nicht mit gleichen Funktionen. Ich hoffe ihr könnt mir da helfen ;)
sourcehunter - Di 12.10.04 20:37
Was macht den dieses "Reader und Writer Zeugs", bzw was soll es machen?
BenBE - Di 12.10.04 20:45
Titel: Re: Übersetzung aus Oberon
Johannes Maier hat folgendes geschrieben: |
Hi,
ich habe ein Problem bei der Übersetzung eines Oberon-Codeabschnittes in Delphi. Dieser hier ist es: |
Problem demnächst bitte versuchen genauer zu Beschreiben in Hinsicht auf "Was soll der Code machen?"
Johannes Maier hat folgendes geschrieben: |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| IMPORT Viewers, Texts, TextFrames, Oberon; . . VAR R: Texts.Reader; W: Texts.Writer; . . PROCEDURE error(n: INTEGER); VAR pos: LONGINT; BEGIN pos := Texts.Pos(R); IF pos > lastpos+2 THEN Texts.WriteString(W, " pos"); Texts.WriteInt(W, pos, 6); Texts.WriteString(W, " err"); Texts.WriteInt(W, n, 4); lastpos := pos; Texts.WriteString(W, " sym"); Texts.WriteInt(W, sy, 4); Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf) END END error; |
Dieses Reader und Writer Zeug ist das Problem ... Die gibt es zwar in Delphi auch, aber nicht mit gleichen Funktionen. Ich hoffe ihr könnt mir da helfen ;) |
Ich geh einfach mal davon aus, dass das ein Konsolen-Programm ist und dort einen Fehler ausgeben soll
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Project OberonMitFehler;
Uses SysUtils;
VAR W: TextFile;
PROCEDURE error(n: INTEGER); VAR pos: LONGINT; BEGIN pos := Pos(R,'Was denn suchen???'); IF pos > lastpos+2 THEN Begin Write(W, Format(' pos %.6d', [pos])); Write(W, Format(' err %.4d', [n])); lastpos := pos; Write(W, Format(' sym %.4d', [sy])); WriteLn(W); END; END;
end. |
Unter der Annahme, dass W deine mit Append geöffnete Logfile ist.
Ansonsten bräuchte ich mehr Infos für die Übersetzung, da ich Oberon nicht kenne.
Johannes Maier - Di 12.10.04 20:51
Das Ganze ist Teil eines Buches zu Compilerbau mit dem ich mich im Moment beschäftige, da ich vorhabe einen "etwas anderen" Matheparser zu schreiben.
Achja, den Pos-Befehl in Delphi kenne ich, aber ich vermute, dass er in Oberon etwas anderes macht, nämlich gibt er wahrscheinlich die aktuelle Position des Readers (der Zeichen für Zeichen liest) im Text wieder. Dabei wird nicht nach etwas Bestimmtem gesucht.
Kann man das nicht mit einem Reader in Delphi realisieren? Mein Problem ist halt nur, dass ich nicht weiß wie man Reader oder Writer einer Textquelle (Datei) zuweist, so dass sie davon lesen/dahinein schreiben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var R: TReader; . . . pos := R.Position; |
Das hab ich schon rausgefunden ;) Aber leider kA ob es mir weiterhilft ...
BenBE - Di 12.10.04 21:02
Gut, dann sind also TReader und TWriter in Oberon TStreams:
Würde also bedeuten:
ist deine Text-Datei, die du mit
Delphi-Quelltext
1:
| FS := TFileStream.Create('Datei.txt', fmOpenReadWrite); |
öffnest.
Lesen von Strings ist dann aber etwas kompliziert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var S:String; begin S := DeinText; FS.WriteBuffer(S[1], Length(S)); end; |
Lesen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var S:String; begin S := StringOfChar(#32, AnzahlZeichen); FS.ReadBuffer(S[1], Length(S)); end; |
Hoffe, das hilft erstmal ein wenig weiter.
Alni - Di 12.10.04 21:06
Kann dir zwar nicht weiterhelfen hab mich selber noch nie mit TReader befasst, aber mich würde interessieren was du mit
Zitat: |
"etwas anderen" Matheparser
|
meinst. Ich hab nämlich selber mal drei Matheparser geschrieben. (Drei deshalb weil man doch auch ab und zu dazu lernt ;) )
Johannes Maier - Mi 13.10.04 19:56
@BenBE: Ja das tut es ;) Mit Streams kenn ich mich aus, das sollte also klappen :)
@Alni: Falls er irgendwann mal fertig wird (ist bisher nur eine Idee) dann stell ich ihn hier rein. Vorher beschäftige ich mich erst mit Compilerbau (das hilft sehr) deshalb verrate ich keine Ideen/Details, sorry ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!