54 lines
2.7 KiB
Markdown
54 lines
2.7 KiB
Markdown
## ADDED Requirements
|
|
|
|
### 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
|