Autor |
Beitrag |
Johannes Maier
      
Beiträge: 173
Win XP
D7 Prof
|
Verfasst: Di 12.10.04 20:35
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 
_________________ MfG
Johannes ehem. jbmaier
|
|
sourcehunter
      
Beiträge: 482
Win XP | Suse 10.1
Delphi 2005 Pers.
|
Verfasst: Di 12.10.04 20:37
Was macht den dieses "Reader und Writer Zeugs", bzw was soll es machen?
_________________ Linux und OpenSource rulez!
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 12.10.04 20:45
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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Johannes Maier 
      
Beiträge: 173
Win XP
D7 Prof
|
Verfasst: 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 ...
_________________ MfG
Johannes ehem. jbmaier
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 12.10.04 21:02
Gut, dann sind also TReader und TWriter in Oberon TStreams:
Würde also bedeuten:
Delphi-Quelltext
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.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Alni
      
Beiträge: 205
Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
|
Verfasst: 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  )
_________________ MfG Alex
|
|
Johannes Maier 
      
Beiträge: 173
Win XP
D7 Prof
|
Verfasst: 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 
_________________ MfG
Johannes ehem. jbmaier
|
|
|