Phase 1: Sprach-Frontend (Lexer, AST, Parser, Semantik) + Entscheidungen
Frontend: - Lexer komplett: Typ-Suffixe, Literal-Typisierung (Entscheidung: > 7 signifikante Stellen -> DOUBLE), Hex/Oktal, Zeilenfortsetzung mit _, Strings mit ""-Escape, case-insensitive Keywords (Bibliotheksnamen bleiben Bezeichner) - AST fuer Module/Prozeduren/Anweisungen/Ausdruecke - Parser: fehlertolerant, zeilenorientiert; Kern-Anweisungssatz inkl. Bloecke, ON [LOCAL] ERROR, DEF FN (einzeilig); Datei-E/A als Phase-3-Platzhalter - Semantik: Symboltabellen, implizite Deklaration, DEFtype, OPTION EXPLICIT, Arrays, Builtin-Signaturen, Labelpruefung; Hardware-Features (PEEK/POKE/...) werden zur Compile-Zeit abgewiesen - Meilenstein: Testkorpus parst und wird typgeprueft (corpus.rs); 27 Tests Entscheidungen eingearbeitet: - Binaries heissen tb (IDE) und tbc (Compiler) - Dynamische Terminalgroesse statt 80x25 (Minimum 80x25, btop-artiger Hinweis darunter); tb-ui::screen mit resize(), Spike angepasst - Vollstaendigkeits-Leitplanke: 100% Sprache/Stdlib minus deklarierte Non-Features; Original-Doku als Guiding Principle; Inventar-Aufgabe - CURRENCY als i64-Festkomma; ISAM wird implementiert; breite Zeichen belegen 2 Zellen; GET/PUT-Strings als UTF-32; Blink als hell simuliert - LICENSE: MIT Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,11 @@ Details, `ener.hlp` Fehlermeldungen; Vergleich PDS 7.1: `bas7qck.hlp`)
|
||||
sowie das Original-README der Professional Edition. Aussagen ohne
|
||||
TODO-Markierung sind daraus belegt.
|
||||
|
||||
**Bewusste Abweichungen vom Vorbild** stehen am Ende des Dokuments.
|
||||
**Guiding Principle:** Die Original-Dokumentation führt. Jedes dort
|
||||
dokumentierte Sprachelement wird unterstützt oder — nur nach expliziter
|
||||
Non-Feature-Entscheidung des Projektinhabers — mit einer klaren
|
||||
Fehlermeldung abgewiesen. **Bewusste Abweichungen und Non-Features**
|
||||
stehen am Ende dieses Dokuments; nur diese Liste rechtfertigt Abweisungen.
|
||||
|
||||
---
|
||||
|
||||
@@ -40,10 +44,12 @@ TODO-Markierung sind daraus belegt.
|
||||
hexadezimal `&HFF`, oktal `&O777`; Suffixe erzwingen den Typ (`10%`, `10&`,
|
||||
`1.5!`, `1.5#`, `2.5@`). Ohne Suffix gilt: Ganzzahl im INTEGER-Bereich →
|
||||
INTEGER; Hex/Oktal ohne `&`-Suffix → 16 Bit (INTEGER), mit `&` → LONG;
|
||||
`E`-Exponent → SINGLE, `D`-Exponent → DOUBLE; Dezimalpunkt-Wert →
|
||||
SINGLE, bei mehr als 15 Stellen DOUBLE (TODO: exakte Schwelle — Quelle
|
||||
an der Stelle widersprüchlich); Ganzzahl außerhalb des LONG-Bereichs
|
||||
wird Gleitkommawert (kein Fehler).
|
||||
`E`-Exponent → SINGLE, `D`-Exponent → DOUBLE; Dezimalpunkt-Wert:
|
||||
**Entscheidung (2026-09-02):** bis 7 signifikante Stellen → SINGLE,
|
||||
darüber → DOUBLE. (Die Original-Hilfe nennt widersprüchlich eine
|
||||
15-Stellen-Schwelle, die SINGLE-Präzision verlöre; wir legen die Schwelle
|
||||
auf die SINGLE-Genauigkeit — präzisionserhaltende Auslegung.)
|
||||
Ganzzahl außerhalb des LONG-Bereichs wird Gleitkommawert (kein Fehler).
|
||||
- **String-Literale:** `"…"`; doppeltes `""` ergibt ein Anführungszeichen.
|
||||
|
||||
## 2. Typsystem
|
||||
@@ -188,9 +194,12 @@ solange ein Menü-Control den Fokus hat. Für Terminal Basic relevant:
|
||||
- `INKEY$` (nicht blockierend; "" wenn leer; erweiterte Tasten:
|
||||
2-Zeichen-Sequenz `CHR$(0)+code` im Vorbild — Abweichung s. u.),
|
||||
`INPUT$(n [,#f])`.
|
||||
- `LOCATE [zeile][,spalte][,cursor an/aus][,start,ende]`, `CSRLIN`, `POS(0)`.
|
||||
- `COLOR [vg][,hg]` (vg 0–31: 16–31 = blinkend; hg 0–7), `CLS`,
|
||||
`WIDTH` (80/40 — wir: nur 80), `VIEW PRINT oben TO unten` (Scrollbereich).
|
||||
- `LOCATE [zeile][,spalte][,cursor an/aus][,start,ende]`, `CSRLIN`, `POS(0)`
|
||||
— arbeiten auf der tatsächlichen Bildschirmgröße (dynamisch, s. Abweichungen).
|
||||
- `COLOR [vg][,hg]` (vg 0–31: 16–31 = blinkend — bei uns als „hell"
|
||||
simuliert, Entscheidung 2026-09-02; hg 0–7), `CLS`,
|
||||
`WIDTH` (im Vorbild 80/40 — bei uns wirkungslos, s. Abweichungen),
|
||||
`VIEW PRINT oben TO unten` (Scrollbereich).
|
||||
- `TAB(n)`, `SPC(n)` in PRINT-Listen.
|
||||
- `BEEP`, `SOUND freq, dauer` (Terminal-Bell / Nicht-Ziel, s. Abweichungen),
|
||||
`PLAY` (Nicht-Ziel).
|
||||
@@ -211,6 +220,9 @@ solange ein Menü-Control den Fokus hat. Für Terminal Basic relevant:
|
||||
`LOC(n)`, `LOF(n)`.
|
||||
- Verwaltung: `NAME alt$ AS neu$`, `KILL datei$`, `FILES [muster$]`,
|
||||
`CHDIR`, `MKDIR`, `RMDIR`, `FILEATTR`, `FREEFILE`.
|
||||
- **ISAM** (Professional-Edition des Vorbilds): wird unterstützt
|
||||
(Entscheidung 2026-09-02) — `OPEN … FOR ISAM`, Tabellen/Indizes,
|
||||
`SEEKGT`-Familie usw.; Umfang wird mit dem Inventar (Phase 3) erfasst.
|
||||
- Pfade: plattformneutral; `/` und `\` werden akzeptiert.
|
||||
|
||||
## 11. Eingebaute Funktionen (Katalog)
|
||||
@@ -267,9 +279,15 @@ Dialoge:
|
||||
- String-Vergleich codepoint-weise (keine CP437-Sortierung).
|
||||
- Der Bildschirmpuffer speichert Unicode-Zeichen; Rahmen werden mit
|
||||
Unicode-Box-Drawing gezeichnet.
|
||||
- Zeichen mit Darstellungsbreite ≠ 1: offen (siehe PLAN.md).
|
||||
2. **Keine Hardware-Nähe:** `PEEK`/`POKE`/`INP`/`OUT`/`CALL ABSOLUTE`/
|
||||
Interrupts lösen Fehler 73 (Feature unavailable) aus.
|
||||
- Zeichen mit Darstellungsbreite 2 (Emoji, CJK) **belegen zwei Zellen**
|
||||
(Entscheidung 2026-09-02; Umsetzung Phase 3).
|
||||
- `GET`/`PUT`-Records: feste Strings (`STRING * n`) werden als **UTF-32**
|
||||
gespeichert (4 Bytes/Zeichen, feste Record-Länge) — Binärdateien sind
|
||||
dadurch bewusst inkompatibel zum Vorbild (Entscheidung 2026-09-02).
|
||||
2. **Keine Hardware-Nähe** (bestätigt 2026-09-02): `PEEK`/`POKE`/`INP`/
|
||||
`OUT`/`WAIT`/`BLOAD`/`BSAVE`/`VARPTR`/`VARSEG`/`SADD`/`CALL ABSOLUTE`/
|
||||
`CALL INTERRUPT`/`IOCTL` werden bereits **zur Compile-Zeit** mit der
|
||||
Meldung „Feature unavailable" abgewiesen (kein Laufzeitfehler).
|
||||
3. **`INKEY$` für erweiterte Tasten** liefert weiterhin
|
||||
`CHR$(0) + code`-Sequenzen mit den klassischen Scancodes (F1 = `CHR$(0)+";"`
|
||||
usw.), damit bestehender Code funktioniert. Zusätzliche moderne Tasten:
|
||||
@@ -282,4 +300,8 @@ Dialoge:
|
||||
„Invalid when forms are showing") — wir übernehmen nur den
|
||||
Forms-/Textmodus-Zweig.
|
||||
6. **`PLAY`/`SOUND`**: `BEEP` = Terminal-Bell; Rest Nicht-Ziel (Fehler 73).
|
||||
7. **`WIDTH 40`** wird nicht unterstützt (nur 80×25).
|
||||
7. **Dynamische Bildschirmgröße** (2026-09-02): kein festes 80×25 — der
|
||||
Bildschirm folgt der Terminalgröße (Mindestgröße 80×25, darunter nur
|
||||
ein Hinweis). `CSRLIN`/`POS`/`LOCATE`/`VIEW PRINT` und das
|
||||
`SCREEN`-Objekt arbeiten auf der tatsächlichen Größe. `WIDTH 40/80`
|
||||
wird akzeptiert, ändert aber nichts (die Größe bestimmt das Terminal).
|
||||
|
||||
Reference in New Issue
Block a user