51 lines
2.6 KiB
Markdown
51 lines
2.6 KiB
Markdown
## MODIFIED Requirements
|
|
|
|
### Requirement: Diagnostik mit Vorbild-Meldungen
|
|
Diagnosen SHALL exakte 1-basierte Quelltextpositionen (Zeile, Spalte)
|
|
tragen; die Meldungstexte SHALL dem Katalog des Vorbilds folgen, wo eine
|
|
Entsprechung existiert (z. B. „Type mismatch", „Duplicate definition",
|
|
„Label not defined", „Subprogram not defined", „Overflow").
|
|
|
|
Bei Projekten und Includes SHALL jede Diagnose den ursprünglichen Dateinamen mit dessen physischer Zeile und Spalte tragen.
|
|
|
|
#### Scenario: Position in der Diagnose
|
|
- **WHEN** in Zeile 3 ein Typkonflikt auftritt
|
|
- **THEN** nennt die Diagnose Zeile 3 und die Spalte des Ausdrucks
|
|
|
|
#### Scenario: Include-Diagnose
|
|
- **WHEN** ein eingebundenes Include einen Typfehler enthält
|
|
- **THEN** nennt die Diagnose die Include-Datei und ihre eigene Quellposition
|
|
|
|
### 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.
|
|
|
|
Gleichnamige Steuerelemente unterschiedlicher Formulare SHALL im jeweiligen Formularnamensraum aufgelöst werden; die explizite Containerangabe SHALL vor der lokalen Namenssuche wirken.
|
|
|
|
#### 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
|
|
|
|
#### Scenario: Gleichnamige Controls verschiedener Formulare
|
|
- **WHEN** Form1 und Form2 jeweils Text1 enthalten und Form2!Text1.Text gelesen wird
|
|
- **THEN** wird Text1 in Form2 aufgelöst und das Programm übersetzt diagnosefrei
|