50 lines
2.5 KiB
Markdown
50 lines
2.5 KiB
Markdown
## 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`
|