Phase 4: Formularmodell und Objektsprache
This commit is contained in:
@@ -247,3 +247,55 @@ 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`
|
||||
|
||||
### Requirement: Objektzugriffe in Grammatik und Semantik
|
||||
Der Parser SHALL Punktpfade auf Formulare und Steuerelemente
|
||||
(`objekt.eigenschaft`), den Container-Operator
|
||||
`form!steuerelement[.eigenschaft]`, `IF TYPEOF ausdruck IS klasse`, den
|
||||
Metabefehl `$FORM` und die Datentypen `FORM` und `CONTROL` als
|
||||
Parametertypen erkennen. Die Semantik SHALL Eigenschaften gegen die
|
||||
Klasse des Objekts prüfen und ihren Typ bestimmen. Ein Punktpfad, dessen
|
||||
Basis weder ein benutzerdefinierter Typ noch ein bekanntes Objekt ist,
|
||||
MUST eine Diagnose erzeugen, die Basis und Eigenschaft namentlich nennt;
|
||||
er MUST NOT zu einer impliziten Variablen mit Punkt im Namen werden.
|
||||
|
||||
#### Scenario: Unbekanntes Objekt wird benannt
|
||||
- **WHEN** ein Modul `Text9.Text = "a"` ohne Steuerelement `Text9` enthält
|
||||
- **THEN** nennt die Diagnose `Text9` als unbekanntes Objekt statt „Type mismatch" zu melden
|
||||
|
||||
#### Scenario: Unbekannte Eigenschaft wird benannt
|
||||
- **WHEN** ein Modul `Text1.Farbe = 3` enthält
|
||||
- **THEN** nennt die Diagnose `Farbe` als unbekannte Eigenschaft von `TextBox`
|
||||
|
||||
#### Scenario: Eigenschaftstyp wird geprüft
|
||||
- **WHEN** ein Modul `Text1.Text = 5` enthält
|
||||
- **THEN** meldet die Semantik einen Typkonflikt mit Nennung der Eigenschaft
|
||||
|
||||
#### Scenario: TYPEOF
|
||||
- **WHEN** ein Modul `IF TYPEOF Ziel IS CommandButton THEN` enthält
|
||||
- **THEN** wird es übersetzt und die Klasse gegen die bekannten Steuerelementklassen geprüft
|
||||
|
||||
### Requirement: Bang-Operator neben dem SINGLE-Suffix
|
||||
Der Lexer SHALL `!` als Container-Operator erkennen, wenn ihm ein
|
||||
Bezeichner folgt, und andernfalls als Typsuffix für SINGLE. Beide Formen
|
||||
MUST im selben Modul nebeneinander verwendbar sein.
|
||||
|
||||
#### Scenario: Beide Bedeutungen im selben Modul
|
||||
- **WHEN** ein Modul `Wert! = 1.5` und `Form1!Text1.Text = "a"` enthält
|
||||
- **THEN** wird die erste Zeile als SINGLE-Variable und die zweite als Containerzugriff übersetzt
|
||||
|
||||
### Requirement: Ereignisprozeduren mit festen Signaturen
|
||||
Die Semantik SHALL eine `SUB`, deren Name der Form `Objekt_Ereignis`
|
||||
entspricht und deren Objekt bekannt ist, als Ereignisprozedur erkennen
|
||||
und ihre Parameterliste gegen die Signatur der Forms-Referenz prüfen.
|
||||
Eine abweichende Parameterliste MUST namentlich gemeldet werden. Eine
|
||||
`SUB` mit Unterstrich im Namen ohne bekanntes Objekt MUST weiterhin eine
|
||||
gewöhnliche Prozedur sein.
|
||||
|
||||
#### Scenario: Falsche Signatur
|
||||
- **WHEN** ein Modul `SUB Form_MouseDown (X AS SINGLE)` enthält
|
||||
- **THEN** nennt die Diagnose die erwartete Parameterliste der Ereignisprozedur
|
||||
|
||||
#### Scenario: Gewöhnliche SUB mit Unterstrich
|
||||
- **WHEN** ein Modul `SUB Zins_Berechnen (n AS INTEGER)` ohne Objekt `Zins` enthält
|
||||
- **THEN** wird sie als gewöhnliche Prozedur übersetzt
|
||||
|
||||
Reference in New Issue
Block a user