Phase 1 vollstaendig abgeschlossen; neue Vorgaben verankert
Frontend-Vervollstaendigung (keine offenen Punkte mehr in Phase 1):
- MID$-Anweisung, DEF-FN-Blockform, COMMON/SHARED/STATIC,
LPRINT, VIEW PRINT, NAME AS, LOCK/UNLOCK, Ereignissteuerung
(TIMER/KEY(n)/UEVENT ON|OFF|STOP), Metabefehle $INCLUDE/$STATIC/$DYNAMIC
- Komplette Datei-E/A-Grammatik: OPEN (beide Syntaxen, inkl. ISAM- und
ACCESS/LOCK-Klauseln), CLOSE, FIELD, GET/PUT, LSET/RSET, WRITE, SEEK
- Semantik: UDT-Feldtypen, SHARED-Import von Modulvariablen,
Konstantenfaltung (Invalid constant), OPTION BASE erfasst
- Non-Features konsistent zur Compile-Zeit abgewiesen: Hardware-Naehe,
CHAIN, Grafik-Anweisungen, SOUND/PLAY ("Feature unavailable")
- 33 Frontend-Tests, Korpus-Meilenstein weiter gruen
Neue Vorgaben:
- Stufe-2-Ideen: SQLite/Embedded-SQL mit Record-Buffern; Runtime-
Bibliotheken (z.B. crossterm) als BASIC-Bibliotheken
- Erster Kompatibilitaetstest: github.com/cout/vbdos (extern, wird nicht
einvendort); binaer-.FRM-Konverter als Phase-4-Aufgabe (tbc convert-frm)
- Doku als Definition of Done: docs/ = Ist-Dokumentation, IDE-Hilfe
rendert Markdown dynamisch zur Fenstergroesse (Phase-5-Aufgabe)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
90
PLAN.md
90
PLAN.md
@@ -55,7 +55,24 @@ Konvention: `[ ]` offen · `[x]` erledigt · `[~]` in Arbeit
|
||||
Toolchain beim Anwender (vorkompilierter Runner + angehängtes `.tbc`) —
|
||||
damit bleibt auch der Weg zum verteilbaren Binary im Sekundenbereich.
|
||||
- **Jede Phase endet mit lauffähigen Tests** gegen eine wachsende
|
||||
Kompatibilitäts-Testsuite (Verzeichnis `tests/compat`, geplant).
|
||||
Kompatibilitäts-Testsuite (Verzeichnis `tests/compat`).
|
||||
- **Erster Kompatibilitätstest — externes Programmkorpus** (2026-09-02):
|
||||
Die Programme aus https://github.com/cout/vbdos (insb. der Ordner
|
||||
`microsoft/`) müssen — soweit sie keine deklarierten Non-Features
|
||||
(PEEK/POKE/CALL INTERRUPT …) nutzen — **erfolgreich kompilieren und
|
||||
nutzbar sein**. Das Repo wird nicht einvendort (Lizenzlage), sondern vom
|
||||
Test-Harness bei Bedarf geklont. Aufgaben: Frontend-Check ab Phase 1,
|
||||
Lauffähigkeit Konsole in Phase 3, Forms in Phase 4 (Meilenstein dort);
|
||||
binäre `.FRM`-Dateien erfordern ein Konvertierungstool → Phase 4.
|
||||
- **Dokumentation ist Teil der Definition of Done** (2026-09-02): Im
|
||||
`docs/`-Ordner entsteht die vollständige Dokumentation der Sprache und
|
||||
der Bibliothek **so wie implementiert** (Ist-Stand): jede Phase
|
||||
schreibt docs/sprachreferenz.md fort und pflegt eine
|
||||
Bibliotheksreferenz (`docs/bibliothek.md`, entsteht mit Phase 3) mit
|
||||
jeder implementierten Anweisung/Funktion. Diese Markdown-Dokumente sind
|
||||
zugleich der Inhalt des IDE-Hilfesystems (Phase 5): Anzeige unter
|
||||
„Help" mit Konsolen-Markdown-Rendering, Umbruch dynamisch nach
|
||||
aktueller Fenstergröße.
|
||||
|
||||
---
|
||||
|
||||
@@ -154,31 +171,45 @@ tatsächlichen Größe; `tb-ui::screen` unterstützt `resize()`.
|
||||
VM-Ticks — ist Eingangsaufgabe von Phase 4.)
|
||||
|
||||
## Phase 1 — Sprach-Frontend (`tb-frontend`)
|
||||
|
||||
**Status: abgeschlossen (2026-09-02).**
|
||||
|
||||
- [x] Lexer inkl. Typ-Suffixe, Zeilennummern/Labels, `REM`/`'`-Kommentare,
|
||||
case-insensitive Keywords, Zeilenfortsetzung mit `_`, Hex-/Oktal-
|
||||
Literale, Literal-Typisierung
|
||||
Literale, Literal-Typisierung, Metabefehle (`$INCLUDE`, `$STATIC`,
|
||||
`$DYNAMIC`)
|
||||
- [x] SINGLE/DOUBLE-Schwelle suffixloser Dezimalpunkt-Literale entschieden
|
||||
(> 7 signifikante Stellen → DOUBLE) und in docs/sprachreferenz.md §1
|
||||
dokumentiert
|
||||
- [x] AST für Module, Prozeduren, Anweisungen, Ausdrücke, Deklarationen
|
||||
- [~] Parser (zeilenorientiert, fehlertolerant — Fehler pro Anweisung
|
||||
gesammelt, Synchronisation bis Anweisungsende). Kern komplett:
|
||||
Zuweisung, PRINT (inkl. USING/#), INPUT/LINE INPUT, IF (Block +
|
||||
einzeilig), SELECT CASE, FOR/DO/WHILE, GOTO/GOSUB/ON-GOTO,
|
||||
ON [LOCAL] ERROR/RESUME, DIM/REDIM/CONST/DEFtype/OPTION/TYPE/
|
||||
DECLARE/SUB/FUNCTION/CALL, DATA/READ/RESTORE, DEF FN (einzeilig).
|
||||
Offen: MID$-Anweisung, DEF FN-Blockform, Datei-E/A-Anweisungen
|
||||
(werden als Platzhalter geparst → Phase 3), `$INCLUDE`-Metabefehl
|
||||
- [~] Semantik: Symboltabellen, implizite Deklaration, `DEFtype`-Regeln,
|
||||
Typprüfung, `OPTION EXPLICIT`, Arrays (implizit/DIM/REDIM),
|
||||
Builtin-Signaturen, Label-Prüfung, Prozedur-Signaturprüfung.
|
||||
Offen: `COMMON`/`SHARED` über Prozedurgrenzen, UDT-Feldtypen,
|
||||
`OPTION BASE`-Auswertung, Konstantenfaltung
|
||||
- [~] Diagnostik mit exakten Positionen; Meldungstexte am Vorbild
|
||||
orientiert (Type mismatch, Duplicate definition, Label not defined …)
|
||||
— vollständiger Abgleich mit den Compile-Meldungen des Vorbilds offen
|
||||
- [x] Parser (zeilenorientiert, fehlertolerant — Fehler pro Anweisung
|
||||
gesammelt, Synchronisation bis Anweisungsende): Zuweisung inkl.
|
||||
MID$-Anweisung, PRINT/LPRINT (inkl. USING/#), INPUT/LINE INPUT,
|
||||
IF (Block + einzeilig), SELECT CASE, FOR/DO/WHILE,
|
||||
GOTO/GOSUB/ON-GOTO, ON [LOCAL] ERROR/RESUME, DIM/REDIM/CONST/
|
||||
DEFtype/OPTION/TYPE/DECLARE/SUB/FUNCTION/CALL, COMMON/SHARED/STATIC,
|
||||
DATA/READ/RESTORE, DEF FN (einzeilig + Blockform), VIEW PRINT,
|
||||
NAME…AS, Ereignissteuerung (`TIMER/KEY(n)/… ON|OFF|STOP`), komplette
|
||||
Datei-E/A-Grammatik (OPEN in beiden Syntaxen inkl. ISAM-Klausel,
|
||||
CLOSE, FIELD, GET/PUT, LSET/RSET, WRITE, SEEK, LOCK/UNLOCK)
|
||||
- [x] Semantik: Symboltabellen, implizite Deklaration, `DEFtype`-Regeln,
|
||||
Typprüfung, `OPTION EXPLICIT`/`BASE`, Arrays (implizit/DIM/REDIM),
|
||||
UDT-Feldtypen (`kunde.name`), `SHARED`-Import von Modulvariablen,
|
||||
`COMMON`, Konstantenfaltung (`CONST`, „Invalid constant"),
|
||||
Builtin-Signaturen, Label-Prüfung, Prozedur-Signaturprüfung;
|
||||
deklarierte Non-Features (Hardware-Nähe, CHAIN, Grafik, SOUND/PLAY)
|
||||
werden zur Compile-Zeit mit „Feature unavailable" abgewiesen
|
||||
- [x] Diagnostik mit exakten Positionen; Meldungstexte folgen dem Katalog
|
||||
des Vorbilds (Type mismatch, Duplicate definition, Label not
|
||||
defined, Feature unavailable, Invalid constant …). Neue Meldungen
|
||||
entstehen mit dem jeweiligen Feature (Teil der Definition of Done)
|
||||
- [x] Meilenstein: kompletter Testkorpus parst und wird typgeprüft
|
||||
(`crates/tb-frontend/tests/corpus.rs`)
|
||||
(`crates/tb-frontend/tests/corpus.rs`; 33 Frontend-Tests)
|
||||
|
||||
Vollständigkeits-Hinweis: Die Sprachabdeckung wird in Phase 3 per
|
||||
Inventar systematisch gegen die Original-Hilfe abgeglichen; dort
|
||||
gefundene Frontend-Lücken sind Bugs im Sinne des Guiding Principle und
|
||||
werden sofort geschlossen (kein Wiedereröffnen der Phase nötig).
|
||||
|
||||
## Phase 2 — Bytecode und VM (`tb-vm`)
|
||||
- [ ] Eingangsaufgabe (aus Phase 0 übernommen): Bytecode-**Feindesign** —
|
||||
@@ -247,6 +278,13 @@ Leitplanke Vollständigkeit); die Aufzählungen unten sind Beispiele.
|
||||
- [ ] `.FRM`-Textformat: Serialisierung **definieren** (kein Original-
|
||||
Beispiel verfügbar — Windows-1.0-Schema, siehe dateiformate.md),
|
||||
dokumentieren, dann lesen/schreiben implementieren
|
||||
- [ ] Konvertierungstool binäre `.FRM` → unsere Text-Serialisierung
|
||||
(Gegenstück zu FT.EXE des Vorbilds; Magic `FC 08 01 00`): als
|
||||
`tbc convert-frm`. Format per Reverse Engineering aus den
|
||||
Beispieldateien des Originalpakets und des cout/vbdos-Repos
|
||||
- [ ] Meilenstein (erster Kompatibilitätstest): die Programme aus
|
||||
https://github.com/cout/vbdos ohne Non-Features kompilieren und
|
||||
sind nutzbar (Konsolenprogramme bereits ab Phase 3)
|
||||
- [ ] Ereignisdispatch: Event-Queue ↔ VM (Ereignisprozeduren `Name_Ereignis`)
|
||||
- [ ] Meilenstein: Beispiel-Formularprogramme aus dem Testkorpus laufen
|
||||
|
||||
@@ -261,6 +299,11 @@ Leitplanke Vollständigkeit); die Aufzählungen unten sind Beispiele.
|
||||
- [ ] Ausführen aus der IDE: Start/Unterbrechen/Fortsetzen/Neustart
|
||||
- [ ] Debugger: Breakpoints, Einzelschritt/Prozedurschritt, Direktfenster,
|
||||
Überwachungsausdrücke
|
||||
- [ ] Hilfe-System: rendert die Markdown-Dokumentation aus `docs/`
|
||||
(Sprach- und Bibliotheksreferenz) im Help-Fenster — Konsolen-
|
||||
Markdown-Rendering mit Umbruch nach aktueller Fenstergröße,
|
||||
Hyperlink-Navigation wie im Vorbild (Tab/Enter/Alt+F1), F1 =
|
||||
kontextsensitiver Sprung zum Thema unter dem Cursor
|
||||
- [ ] Meilenstein: Programm komplett in der IDE schreiben, gestalten,
|
||||
debuggen und ausführen
|
||||
|
||||
@@ -291,6 +334,15 @@ bleibt gültig. Noch nichts davon ist beschlossen; Sammlung wächst:
|
||||
Forms-Engine
|
||||
- Standardbibliothek: Prozessaufrufe mit Pipes, Umgebungs-/Argument-Handling
|
||||
für CLI-Tools, JSON/CSV, HTTP-Client, Pfad-/Verzeichnisfunktionen
|
||||
- **SQLite-Integration mit Embedded SQL** (2026-09-02): Spracherweiterung
|
||||
für eingebettetes SQL — z. B. `WHILE SELECT … / WEND`-Konstrukte —
|
||||
mit Record-Buffer-Datentypen, auf denen `SELECT`/`UPDATE`/`INSERT`/
|
||||
`DELETE` arbeiten (natürliche Weiterentwicklung der ISAM-Idee auf
|
||||
SQLite als Speicher)
|
||||
- **Runtime-Bibliotheken als BASIC-Bibliotheken** (2026-09-02): in der
|
||||
Runtime integrierte Rust-Bibliotheken (z. B. crossterm für direkte
|
||||
Terminalsteuerung) als eigene, importierbare Bibliotheken für
|
||||
BASIC-Programme bereitstellen
|
||||
- Verteilung: `tbc build --exe` als Single-File-Tool-Baukasten
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user