Phase 4: Ereignisschleife und klassische Traps
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Ereignis-Traps in Grammatik und Signaturprüfung
|
||||
Der Parser SHALL die Trap-Anweisungen des Vorbilds als eigene Konstrukte
|
||||
erkennen: `ON TIMER(n) GOSUB ziel`, `ON KEY(n) GOSUB ziel`,
|
||||
`ON UEVENT GOSUB ziel` und `ON SIGNAL(n) GOSUB ziel`. Diese Formen MUST
|
||||
NOT als berechnetes `ON ausdruck GOSUB liste` behandelt werden. Die
|
||||
Steueranweisungen `TIMER`, `KEY(n)`, `UEVENT` und `SIGNAL(n)` mit `ON`,
|
||||
`OFF` oder `STOP` SHALL erkannt und nur für diese Quellen zugelassen
|
||||
werden; `EVENT` SHALL nur `ON` und `OFF` zulassen, weil das Vorbild
|
||||
keinen dritten Zustand kennt. `COM`, `PEN`, `PLAY` und `STRIG` MUST als
|
||||
Non-Feature namentlich abgewiesen werden. `SetUEvent` SHALL eine
|
||||
Signatur besitzen. Die Wertebereiche SHALL geprüft werden: `ON KEY(n%)`
|
||||
mit `n%` aus 0, 1–25 oder 30–31, `ON TIMER(n&)` mit `n&` aus 1–86 400
|
||||
und `ON SIGNAL(n%)` mit `n%` aus 1–2. Eine fehlerhafte Verwendung MUST
|
||||
eine Diagnose erzeugen, die das Element namentlich nennt.
|
||||
|
||||
#### Scenario: ON TIMER ist kein berechnetes GOSUB
|
||||
- **WHEN** ein Modul `ON TIMER(5) GOSUB Marke` enthält
|
||||
- **THEN** wird die Anweisung als Zeit-Trap erfasst und nicht als `ON ausdruck GOSUB` mit einer einelementigen Zielliste
|
||||
|
||||
#### Scenario: Ungültige Kennung wird namentlich gemeldet
|
||||
- **WHEN** ein Modul `ON KEY(99) GOSUB Marke` enthält
|
||||
- **THEN** nennt die Diagnose `ON KEY` und den zulässigen Wertebereich
|
||||
|
||||
#### Scenario: EVENT kennt kein STOP
|
||||
- **WHEN** ein Modul `EVENT STOP` enthält
|
||||
- **THEN** nennt die Diagnose `EVENT` und die zulässigen Formen `ON` und `OFF`
|
||||
|
||||
#### Scenario: Zeitintervall außerhalb des Bereichs
|
||||
- **WHEN** ein Modul `ON TIMER(90000) GOSUB Marke` enthält
|
||||
- **THEN** nennt die Diagnose `ON TIMER` und den Bereich 1 bis 86400
|
||||
|
||||
#### Scenario: Non-Feature-Quelle wird abgewiesen
|
||||
- **WHEN** ein Modul `ON PEN GOSUB Marke` enthält
|
||||
- **THEN** meldet die Übersetzung „Feature unavailable" an der Fundstelle der Anweisung — wie bei jedem anderen Non-Feature — und nicht einen generischen Syntaxfehler
|
||||
|
||||
#### Scenario: SetUEvent besitzt eine Signatur
|
||||
- **WHEN** ein Modul `CALL SetUEvent` enthält
|
||||
- **THEN** entsteht keine Diagnose „Subprogram not defined"
|
||||
|
||||
### Requirement: Trap-Ziele sind Sprungziele des Moduls
|
||||
Das Ziel eines Ereignis-Traps SHALL wie ein `GOSUB`-Ziel aufgelöst
|
||||
werden. Ein unbekanntes Ziel MUST zur Übersetzungszeit gemeldet werden
|
||||
und nennt dabei das Label.
|
||||
|
||||
#### Scenario: Unbekanntes Trap-Ziel
|
||||
- **WHEN** ein Modul `ON TIMER(1) GOSUB Fehlt` ohne Label `Fehlt` enthält
|
||||
- **THEN** meldet die Übersetzung ein undefiniertes Sprungziel und nennt `Fehlt`
|
||||
Reference in New Issue
Block a user