2.5 KiB
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 Markeenthält - THEN wird die Anweisung als Zeit-Trap erfasst und nicht als
ON ausdruck GOSUBmit einer einelementigen Zielliste
Scenario: Ungültige Kennung wird namentlich gemeldet
- WHEN ein Modul
ON KEY(99) GOSUB Markeenthält - THEN nennt die Diagnose
ON KEYund den zulässigen Wertebereich
Scenario: EVENT kennt kein STOP
- WHEN ein Modul
EVENT STOPenthält - THEN nennt die Diagnose
EVENTund die zulässigen FormenONundOFF
Scenario: Zeitintervall außerhalb des Bereichs
- WHEN ein Modul
ON TIMER(90000) GOSUB Markeenthält - THEN nennt die Diagnose
ON TIMERund den Bereich 1 bis 86400
Scenario: Non-Feature-Quelle wird abgewiesen
- WHEN ein Modul
ON PEN GOSUB Markeenthä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 SetUEvententhä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 Fehltohne LabelFehltenthält - THEN meldet die Übersetzung ein undefiniertes Sprungziel und nennt
Fehlt