Sie sind auf Seite 1von 28

EDIABAS — BEST/2 SPRACHBESCHREIBUNG

EDIABAS
Eigendiagnose-Basissystem

BEST/2 SPRACHBESCHREIBUNG

VERSION 6c

Copyright BMW AG, created by Softing AG

BEST2SPC.DOC
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

INHALT

INHALT ............................................................................................................2

1. Einführung in BEST/2.................................................................................5

2. Text Konventionen .....................................................................................6


2.1. Kommentare......................................................................................6
2.2. Namen ..............................................................................................6
2.3. Reservierte Worte .............................................................................6
2.4. Konstanten ........................................................................................7
2.4.1 Integer Konstanten..............................................................7
2.4.2 Char Konstanten .................................................................7
2.4.3 String Konstanten ...............................................................7
2.4.4 Listen (Data) Konstanten ....................................................7
2.5. Größen ..............................................................................................7
2.6. Syntax Schreibweise .........................................................................8
2.7. Was bedeutet ein Name....................................................................8
2.8. Objekte und L-Werte .........................................................................8

3. Umwandlungen...........................................................................................9
3.1. Zeichen und Integer ..........................................................................9
3.2. Integer ohne Vorzeichen ...................................................................9
3.3. Arithmetische Umwandlungen...........................................................9

4. Ausdrücke ...................................................................................................10
4.1. Einfache Ausdrücke ..........................................................................10
4.2. Unitäre Operatoren ...........................................................................11
4.3. Multiplikation und Division .................................................................12
4.4. Addition und Subtraktion ...................................................................12
4.5. Shift Operationen ..............................................................................13
4.6. Vergleiche .........................................................................................13
4.7. Äquivalenz Vergleiche.......................................................................13
4.8. UND Verknüpfung von Bits ...............................................................14

2
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

4.9. Exclusive ODER Verknüpfung von Bits.............................................14


4.10. ODER Verknüpfung von Bits...........................................................14
4.11. Logische UND Verknüpfung............................................................14
4.12. Logische ODER Verknüpfung .........................................................15
4.13. Zuweisungen...................................................................................15
4.14. Listen von Ausdrücken ....................................................................15

5. Vereinbarungen ..........................................................................................17
5.1. Typ Bezeichnungen ..........................................................................17
5.2. Deklaratoren......................................................................................17
5.3. Initialisierungen .................................................................................18
5.4. Vordefinierte Makros .........................................................................18

6. Anweisungen ..............................................................................................19
6.1. Compileranweisungen.......................................................................19
6.1.1. #include .................................................................................19
6.1.2. #define ...................................................................................20
6.1.3. #undef....................................................................................20
6.1.4. #asm #endasm ......................................................................21
6.2. Zuweisungen und Prozeduraufrufe ...................................................21
6.3. Blöcke ...............................................................................................21
6.4. "if" Anweisungen ...............................................................................21
6.5. "while" Anweisung .............................................................................22
6.6. "do" Anweisung .................................................................................22
6.7. "switch" Anweisung ...........................................................................22
6.8. "break" Anweisung ............................................................................23
6.9. "continue" Anweisung........................................................................23
6.10. "return" Anweisung..........................................................................23

7. Globale Vereinbarungen ............................................................................25


7.1. Header ..............................................................................................25
7.2. Jobs ..................................................................................................25

3
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

8. Geltungsbereiche .......................................................................................27

9. Laufzeitbibliothek .......................................................................................28

4
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

1. Einführung in BEST/2

BEST heißt BEschreibungssprache für STeuergeräte. Diese


Beschreibungssprache wird im Rahmen des EDIABAS eingesetzt, um die
Forderung nach einer applikationsunabhängigen Beschreibungsmöglichkeit zu
erfüllen. Zur Programmlaufzeit werden Beschreibungsdateien geladen und
interpretiert, in denen das Wissen über die Steuergeräte, wie Adressen und
Umrechnungen, verborgen ist (encapsuling). Die Beschreibungssprache
BEST/2 stellt also Mittel und Wege zur Verfügung um die in den Steuergeräten
abgelegten Daten in steuergeräteunabhängige Werte wie z.B. Drehzahl oder
Gerätenummer zu wandeln. Dabei werden nur die wirklich von der Applikation
benötigten Daten weitergeleitet (information hiding).

Zu diesem Zweck existiert schon ein Sprache, BEST/1 die eine Syntax in
Anlehnung an Assemblersprache hat. Diese Sprache ist zwar für Testzwecke
und einfache Programmierarbeiten gut geeignet, jedoch schwer lesbar und
verständlich.

Deshalb wurde in Anlehnung an die Sprache 'C', die leichter lesbare Sprache
BEST/2 geschaffen, die diese Probleme beseitigt. Die Sprache 'C' wurde
gewählt, weil sie eine große Verbreitung gefunden hat, strukturiert ist, und
wenige, leicht erlernbare Sprachelemente enthält.

BEST/2 ist eine problemorientierte Sprache. Spezielle Funktionen werden über


Bibliotheksfunktionen aufgerufen. Einzige Ausnahme hiervon ist die
Ergebnisverwaltung, die elementarer Bestandteil der Sprachdefinition ist.

Da der mit BEST/2 verwendete virtuelle Prozessor keinen Speicher kennt,


fehlen alle Speicherdefinitionen. Ausgenommen hiervon ist der Stack der schon
im Prozessor zur Verfügung steht.

5
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

2. Text Konventionen

Es gibt sieben Klassen von Worten: Namen, reservierte Worte, Konstanten,


Strings, Listen, Operatoren und andere Trenner. Leerstellen und Tabulatoren
sowie Zeilentrenner und Kommentare werden als Zwischenraum bezeichnet
und ignoriert, abgesehen davon, daß sie zur Trennung benachbarter Namen,
Konstanten oder reservierter Worte nötig sind.

2.1. Kommentare

Am Anfang eines Kommentars stehen die Zeichen /* und der Kommentar endet
mit den Zeichen */. Am Anfang eines Kommentars stehen die Zeichen //. Dieser
Kommentar endet mit dem Zeilenende. Kommentare mit /* */ können nicht
geschachtelt werden.

2.2. Namen

Ein Name besteht aus einer Folge von Buchstaben und Ziffern; das erste
Zeichen muß ein Buchstabe sein. Dabei zählt das Zeichen _ (Unterstrich) zu
den Buchstaben. Große und kleine Buchstaben werden unterschieden. Zur
Unterscheidung von Namen werden die ersten 32 Zeichen betrachtet. Sie
dürfen allerdings länger sein.

2.3. Reservierte Worte

Die folgenden Worte sind reserviert, und können nur mit ihrer vordefinierten
Bedeutung verwendet werden:

argument author break case char


comment const continue data default
defrslt do ecu else exist
if int job language long
name origin range real result
return revision sizeof string switch
type unsigned uses while #asm
#define #endasm #include #undef

6
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

2.4. Konstanten

Es gibt eine ganze Reihe von Konstanten, die im folgendenden beschrieben


werden. Abschnitt 2.5 beschreibt die Eigenschaften des virtuellen Prozessors,
die die Größe der Konstanten beeinflußen. Alle Konstanten sind Long
Konstanten.

2.4.1 Integer Konstanten


Eine Integer Konstante besteht aus eine Kette von Ziffern. Sie hat den Typ int
und wird normalerweise dezimal interpretiert.

Falls die Kette mit der Folge 0x oder 0X beginnt, wird sie hexadezimal, also in
Basis 16 interpretiert. Dabei gelten dann die Buchstaben a (oder A) bis f (oder
F) als hexadezimale Ziffern mit den dezimalen Werten 10 bis 15.

Falls die Kette mit der Folge 0y oder 0Y beginnt, wird sie binär, also in Basis 2
interpretiert. Dabei gelten dann nur noch die Ziffern 1 und 0.

2.4.2 Char Konstanten


Ein Zeichen das in einfache Anführungszeichen eingechlossen ist, also 'x', ist
eine char Konstante. Der Wert dieser Konstante ist der Wert des Zeichens im
ASCII Zeichensatz.

2.4.3 String Konstanten


Ein String ist eine Folge von Zeichen umgeben mit Doppel-Anführungsstrichen,
also "...". Ein String wird mit dem Zeichen NUL beendet.

2.4.4 Listen (Data) Konstanten


Eine Liste ist eine Folge von anderen (nicht Listen) Konstanten, getrennt durch ,
und von { und } eingeschlossen. In Listen angegebene Strings werden nicht mit
NUL terminiert. Die Länge der Liste wird mitgeführt.

2.5. Größen

char 8 Bit ASCII


int 16 Bit
long 32 Bit

7
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

real 64 Bit
char[] max. 1023 Byte
int[] max. 1023 Byte
long[] max. 1023 Byte

2.6. Syntax Schreibweise

für die Beschreibung der Grammatik gelten folgende Regeln: "|" trennt
Alternativen, "[" und "]" umgeben optionale Teile, "{" und "}" umgeben optionale
Teile, die auch vielfach angegeben werden können, und ";" beenden jeweils
eine Regel.

2.7. Was bedeutet ein Name

Ein Name ist ein Objekt das dem Compiler mit Typ und Speicherplatz bekannt
ist.

2.8. Objekte und L-Werte

Ein Objekt ist ein Speicherbereich der modifiziert werden kann. Ein L-Wert ist
ein Ausdruck, der ein Objekt bezeichnet. Ein Name ist ein triviales Beispiel für
einen L-Wert Ausdruck. Die Bezeichnung L-Wert erinnert an die Zuweisung
E1=E2, bei der der linke Operand E1 ein L-Wert Ausdruck sein muß.

8
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

3. Umwandlungen

3.1. Zeichen und Integer

char, int und long Werte können überall dort verwendet werden, wo ein Integer
Objekt benötigt wird. Die Werte werden jeweils in Integerwerte umgewandelt.
Ein char, oder int oder long Wert hat ein Vorzeichen, das bei der Umwandlung
in längere Integerwerte erhalten bleibt.

3.2. Integer ohne Vorzeichen

Wenn ein unsigned Wert und ein regulärer Wert miteinander verknüpft werden,
wird der reguläre Wert in unsigned umgewandelt, und das Resultat ist
ebenfalls unsigned. Ein kürzerer unsigned Wert wird in einen regulären Wert
gewandelt, indem entsprechend Nullbits als signifikanteste Bits hinzugefügt
werden.

3.3. Arithmetische Umwandlungen

Zuerst werden char Werte in long Werte gewandelt.

Wenn einer der Operanden unsigned ist, der andere ebenfalls in unsigned
umgewandelt, und dies ist dann auch der Typ des Resultats.

Falls keiner dieser Fälle vorliegt, sind beide Operanden long Werte, und das
Resultat ebenfalls ein long Wert.

9
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

4. Ausdrücke

In diesem Abschnitt werden die Operatoren für Ausdrücke definiert. Für


einfache Ausdrücke, und unitäre Operatoren wird angegeben, ob sie L-Werte
liefern. Alle anderen Operatoren liefern keine L-Werte.

Die nachfolgenden Abschnitte sind in Bezug auf abnehmenden Vorrang der


Operatoren geordnet; innerhalb eines Abschnitts haben die Operatoren
gleichen Vorrang. In jedem Abschnitt ist die Assoziativität der Operatoren
angegeben. (unsichtbare Klammerung).

Vom Vorrang abgesehen, ist die Reihenfolge der Abarbeitung undefiniert.

ACHTUNG: Operatoren sind auf real Werte nicht anwendbar.


Real Werte können nur mit den entsprechenden
BEST/2 Funktionen bearbeitet werden. Die
Verwendung von Operatoren liefert undefinierte
Ergebnisse!

4.1. Einfache Ausdrücke

Einfache Ausdrücke sind Verweise auf Objekt und Konstanten, die Index
Operation und Funktionsaufrufe. Diese Operationen sind links-assoziativ.

primary:
identifier
| constant integer
| constant array
| (expression )
| primary ( [argument-list] )
| primary [ expression ]
;

argument-list:
assignment { , assignment }
;

Ein Name ist ein einfacher Ausdruck, vorrausgesetzt, er wurde geeignet


vereinbart. Ein Name ist im allgemeinen ein L-Wert. Der Type des Namens folgt
prinzipiell aus der Vereinbarung. Eine Konstante ist kein L-Wert. Konstante
Arrays geben immer 1 zurück. Identifier geben Ihren Wert zurück. Array geben
immer den Wert 1 zurück, ausser sie werden auf Arrays zugewiesen. Namen
von Jobergebnissen geben 1 zurück, wenn das Ergebnis angefordert wurde,
bzw. 0 wenn nicht. Namen von Jobparametern geben 1 zurück, wenn sie
angegeben wurden, sonst 0.

10
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

4.2. Unitäre Operatoren

Unitäre Operatoren sind rechts-assoziativ.

unary:
primary
| primary ++
| primary --
| - primary
| ! primary
| ~ primary
| ++ primary
| -- primary
| exist identifier
| sizeof unary
| sizeof (type-specifikation)
;

Der unitäre - Operator liefert den negativen Wert seines Operanden.

Der ! Operator für logische Negation liefert 1 für einen Operanden mit Wert 0
und 0 für alle anderen Operanden. Das Resultat hat den Typ long.

Der ~ Operator komplemetiert die einzelnen Bits in seinem Operanden.

Der ++ und -- Operanden verändern ihre Operanden, indem der Wert 1 addiert
oder subtrahiert wird. Der Operand muß ein L-Wert sein. Das Resultat ist kein
L-Wert.

Der Ausdruck ++E ist äquivalent zu E+=1, das Resultat ist also der neue Wert
des Operanden, nachdem 1 addiert wurde.

Der Ausdruck --E ist äquivalent zu E-=1, das Resultat ist also der neue Wert
des Operanden, nachdem 1 subtrahiert wurde.

Der Ausdruck E++ liefert den gleichen Wert des Operanden E, also den
usrpünglichen Wert des Objekts, das der L-Wert E bezeichnet. Zum Objekt
selbst wird 1 addiert.

Der Ausdruck E-- liefert den gleichen Wert des Operanden E, also den
usrpünglichen Wert des Objekts, das der L-Wert E bezeichnet. Vom Objekt
selbst wird 1 subtrahiert.

Der sizeof Operator liefert die Größe seines Operanden gemessen in Bytes.

Der exist Operator liefert <>0 (TRUE) oder 0 (FALSE) zurück, in Abhängigkeit
davon ab der angegebene Identifier verfügbar ist oder nicht. Für alle Variablen,

11
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

Konstanten und Ergebnisnamen ist dies immer TRUE. Für Jobargumente nur
dann, wenn Sie beim Jobaufruf angegeben wurden.

4.3. Multiplikation und Division

Die Operatoren *,/ und % für Multiplikation und Division sind links assoziativ.
Die üblichen arithmetischen Umwandlungen finden statt.

multiplication:
unary
| multiplication * unary
| multiplication / unary
| multiplication % unary
;

Der binäre * Operator bezeichnet eine Multiplikation. Dieser Operator ist


kommutativ und assoziativ.

Der binäre / Operator bezeichnet eine Division. Wenn positive Werte dividiert
werden, wird in Richtung auf 0 abgebrochen. Ansonsten wird in der Richtung
der negativsten Zahl abgebrochen.

Der binäre % Operator liefert den Rest nach Division seiner beiden Operanden.

4.4. Addition und Subtraktion

Die + und - Operatoren für Addition und Subtraktion sind links-assoziativ. Die
üblichen arithmetischen Umwandlungen werden angewendet.

addition:
multiplication
| addition + multiplication
| addition - mutliplication
;

Der + Operator liefert die Summe seiner Operanden. Er ist assoziativ und
kommutativ.

Der - Operator liefer die Differenz seiner Operanden.

12
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

4.5. Shift Operationen

Die shift Operatoren << und >> sind links-assoziativ. Die üblichen
arithmetischen Wandlungen finden statt. Der rechte Operand wird in einen
unsigned Wert umgewandelt.

shift:
addition
| shift << addition
| shift >> addition
;

Der Wert von E1<<E2 ist das Bitmuster von E1 um E2 Bits nach links
verschoben. Es werden dabei 0 Bits nachgeschoben.

Der Wert von E1>>E2 ist das Bitmuster von E1 um E2 Bits nach rechts
verschoben. Ist E1 unsigned so werden Bits mit Wert 0 nachgeschoben. Ist E1
regulärer Wert, so werden Bits entsprechend seinem Vorzeichen Bit
nachgeschoben.

4.6. Vergleiche

Vergleiche sind links-assoziativ.

comparison:
shift
| comparison < shift
| comparison <= shift
| comparison > shift
| comparison >= shift
;

Die Vergleichsoperatoren liefern den long Wert 0 falls die angegebene Relation
falsch ist, und 1 wenn die Relation vorliegt. Die üblichen arithmetischen
Umwandlungen finden statt.

4.7. Äquivalenz Vergleiche

Die == und != Operatoren verhalten sich analog wie die anderen Vergleich
Operatoren, sie haben jedoch geringeren Vorrang.

equality:
comparison

13
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

| equality == comaprison
| equality != comparison
;

4.8. UND Verknüpfung von Bits

bit-and:
equality { & equality }
;

Der & Operator ist kommutativ und assoziativ. Die üblichen arithmetischen
Umwandlungen finden statt.

4.9. Exclusive ODER Verknüpfung von Bits

bit-exclusive-or:
bit-and { ^ bit-and }
;

Der ^ Operator ist kommutativ und assoziativ. Die üblichen arithmetischen


Umwandlungen finden statt.

4.10. ODER Verknüpfung von Bits

bit-or:
bit-exclusive-or { | bit-exclusive-or }
;

Der | Operator ist kommutativ und assoziativ. Die üblichen arithmetischen


Umwandlungen finden statt.

4.11. Logische UND Verknüpfung

andif:
bit-or { && bit-or }
;

Der && Operator ist links assoziativ. Das Resultat ist 1 wenn beide Operatoren
nicht 0 sind, sonst ist das Resultat 0. Dabei wird der rechte Operand nur
bewertet, wenn der linke Operand nicht 0 ist.

14
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

4.12. Logische ODER Verknüpfung

binary:
andif { || andif }
;

Der || Operator ist links assoziativ. Das Resultat ist 0 wenn beide Operatoren 0
sind, sonst ist das Resultat 1. Dabei wird der rechte Operand nur bewertet,
wenn der linke Operand 0 ist.

4.13. Zuweisungen

Zuweisungsoperatoren sind rechts-assoziativ. Der linke Operand muß immer


ein L-Wert sein. der Typ des Resultats ist immer der Typ des linken Operanden.
Eine Zuweisungsoperation liefert als Resultat den Wert, der sich im linken
Operanden befindet.

assignment:
binary
| unary = assignment
| unary *= assignment
| unary /= assignment
| unary %= assignment
| unary += assignment
| unary -= assignment
| unary &= assignment
| unary ^= assignment
| unary |= assignment
;

Bei der einfachen Zuweisung ersetzt der Wert des rechten Operanden den Wert
des Objekts, das der linke Operand bezeichnet. Der recht Operand wird vor der
Zuweisung in den Typ des linken Operanden umgewandelt.

Der Wert der Zuweisung der Form E1 op= E2 kann aus der Zuweisung E1 = E1
op (E2) geschlossen werden. E1 wird jedoch nur einmal bewertet.

4.14. Listen von Ausdrücken

expression:
assignment {, assignment}
;

15
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

Zwei Ausdrücke die durch Komma getrennt sind werden von links nach rechts
bewertet. Typ und Wert des Resultats sind Typ und Wert des rechten
Ausdrucks. Diese Operation ist links-assoziativ.

16
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

5. Vereinbarungen

Vereinbarungen legen fest, wie BEST/2 die einzelnen vom Benutzter


eingeführten Namen interpretieren soll. Sie haben folgende Form:

declaration:
type-name initialized-declarator-list ;
| real identifier ;
;

Definitionen reservieren Speicherplatz (Register) und enthalten Angaben für


den Typ einer Liste von Deklaratoren. Die Deklaratoren enthalten die Namen,
die vereinbart werden, möglicherweise zusammen mit Initialisierungen.

5.1. Typ Bezeichnungen

Es gibt folgende Typnamen:

type-name:
[unsigned] int
| [unsigned] long
| [unsigned] char
;

extra-type-name:
data
string
real
;

Eine Vereinbarung kann nur einen Typnamen enthalten.

5.2. Deklaratoren

In einer Vereinbarung wird jeweils eine Liste von Deklaratoren angegeben, die
durch Komma voneinander getrennt sind. In Datendefinitionen kann zusätzlich
nach jedem Deklarator eine Initialisierung angegeben werden.

initialized-declarator-list:
declarator [ = initializer ]
;

declarator:

17
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

identifier { '[' ']' }


| ( declarator )
;

folgt einem Deklarator ein eckiges Klammernpaar, so wurde eine Arrayvariable


vereinbart.

5.3. Initialisierungen

In einer Definition können Daten auch initialisiert werden. Der Initialisierung


geht jeweils das Zeichen = voraus, anschließend folgt ein Ausdruck.

initializer:
assignment
;

5.4. Vordefinierte Makros

In BEST/2 existieren eine Reihe vordefinierter Makros, welche die Abfrage der
jeweiligen Header-Definitionen in BEST/2-Jobs ermöglichen:

__ECU__ Bezeichnung des Steuergerätes

__ORIGIN__ Autor der Ersterstellung

__REVISION__ Version (entspricht Header-Definition revision)

__AUTHOR__ Author

__LANGUAGE__ Sprache

__USES__ Basisbeschreibungsdateien

__ECUCOMMENT__ Kommentar (1. Zeile)

Die vordefinierten Makros sind in BEST/2-Jobs wie globale String-Konstanten


zu benutzen. Sollte eine optionale Header-Definition nicht vorhanden sein, so
liefert das Makro einen Leer-String.

18
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

6. Anweisungen

Falls nichts ausdrücklich erwähnt, werden Anweisungen sequentiell


nacheinander ausgeführt.

statement:
statement-prefix statement
| [expression] ;
| compound-statement
| if ( expression ) statement
| if ( expression ) statement else statement
| do statement while ( expression ) ;
| break ;
| continue ;
| return ;
;

statement-prefix:
while ( expression )
| switch ( expression )
| case constant-integer :
| default :
;

6.1. Compileranweisungen

Alle Compileranweisungen müssen zu Beginn einer Zeile angegeben werden.

6.1.1. #include
In BEST/2 Beschreibungsdateien können mit der Anweisung #include weitere
BEST/2-Quelldateien eingefügt werden. Eine Zeile

#include "BEST/2-Quelldatei"

wird durch den Inhalt der angegeben Datei ersetzt. Bei der Angabe von
absoluten und relativen Pfaden ist die DOS-Notation zu verwenden.

Falls der angegebene Include-Dateiname eine absolute oder relative


Pfadangabe enthält, muß sich die Include-Datei in dem entsprechenden
Verzeichnis befinden. Bei relativen Pfaden wird vom Pfad der BEST/2-
Quelldatei ausgegangen.

19
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

Enthält der angegebene Include-Dateiname keine Pfadangabe, so wird zuerst


im Verzeichnis der BEST/2 Beschreibungsdatei gesucht. Über den Compiler
kann die Suche auf zusätzliche Verzeichnisse ausgedehnt werden.

Eine #include Anweisungszeile darf nach dem Include-Dateinamen nur noch


Kommentare enthalten. Ein Kommentar darf sich hierbei nicht über mehrere
Zeilen erstrecken, sondern muß in der gleichen Zeile wieder beendet werden.

6.1.2. #define
In BEST/2 Beschreibungsdateien können über die Anweisung #define
Textersetzungen definiert werden. Eine Zeile

#define identifier text

bewirkt im weiteren Verlauf einer BEST/2 Beschreibungsdatei die Ersetzung


des Namens durch den angegebenen Text. Ein langer Ersatztext kann auf
mehrere Zeilen aufgeteilt werden, indem man das Zeichen \ an das Ende der
Zeile stellt. Innerhalb von Kommentaren und Zeichenketten werden keine
Textersetzungen vorgenommen.

Der Aufbau des Namens folgt den Regeln sonstiger BEST2-Namen.

Makros und Escape-Zeichen werden nicht unterstützt.

Eine #define Anweisungszeile darf nach dem Ersatztext nur noch Kommentare
enthalten. Ein Kommentar darf sich hierbei nicht über mehrere Zeilen
erstrecken, sondern muß in der gleichen Zeile wieder beendet werden.

6.1.3. #undef
In BEST/2 Beschreibungsdateien können vorausgehende #define Definitionen
mit der Anweisung

#undef identifier

wieder verworfen werden.

Eine #undef Anweisungszeile darf nach dem Bezeichner nur noch Kommentare
enthalten. Ein Kommentar darf sich hierbei nicht über mehrere Zeilen
erstrecken, sondern muß in der gleichen Zeile wieder beendet werden.

20
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

6.1.4. #asm #endasm


In BEST/2 Beschreibungsdateien kann BEST/1-Code eingefügt werden. Der
BEST/1 Code wird dabei zwischen den Anweisungen #asm und #endasm
geklammert.

#asm

BEST/1 Code

#endasm

6.2. Zuweisungen und Prozeduraufrufe

Die Berechnung eines Audruck ist die am häufigsten verwendete Anweisung;


sie hat folgende Form:

expression ;

Solche Anweisungen sind normalerweise Zuweisungen oder Prozeduraufrufe.

6.3. Blöcke

In einem Block werden mehrere Anweisungen zusammengefaßt. Ein Block


kann immer anstelle einer einfachen Anweisung angegeben werden.

compound-statement:
{ {declaration} {statement} }
;

Ein Block kann Vereinbarungen enthalten. Wird dabei ein Name vereinbart, der
bereits früher eingeführt wurde, so wird die frühere Vereinbarung für den
Bereich des Blocks ersetzt und am Ende des Blocks wieder hergestellt. Dies gilt
nicht für Arrayvariable. Diese gelten jobglobal für alle Blöcke ab ihrer Definition.

6.4. "if" Anweisungen

Es gibt zwei Varianten der if-Anweisung:

if (expression)
statement

und

21
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

if (expression)
statement
else
statement

In beiden Fällen wird zunächst der Ausdruck bewertet. Ist das Resultat nicht 0,
so wird die erste abhängige Anweisung ausgeführt. Im zweiten Fall wird die
zweite abhängige Anweisung genau dann ausgeführt, wenn das Resultat 0 ist.
Else wird dem jeweils nächsten if zugeordnet.

6.5. "while" Anweisung

Die while Anweisung hat folgende Form:

while(expression)
statement

Die abhängige Anweisung wird solange wiederholt, wie der Wert des Ausdrucks
nicht 0 ist. Der Ausdruck wird jedesmal bewertet, bevor die abhängige
Anweisung ausgeführt wird.

6.6. "do" Anweisung

Die do Anweisung hat folgende Form:

do
statement
while(expression);

Die abhängige Anweisung wird solange wiederholt, wie der Wert des Ausdrucks
nicht 0 ist. Der Ausdruck wird jedesmal bewertet, nachdem die abhängige
Anweisung ausgeführt wird. D.h. der Ausdruck wird mindestens einmal
ausgeführt.

6.7. "switch" Anweisung

Die switch-Anweisung sorgt dafür, daß die Ausführung des Programms bei
einer von mehreren Anweisungen fortgesetzt wird, in Abhängigkeit vom Wert
eines Ausdrucks. Die switch-Anweisung hat folgende Form:

switch (expression)
statement;

22
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

Zur Bewertung des Ausdrucks finden die üblichen arithmetischen


Umwandlungen statt, aber das Resultat muß ein Integer sein. Die abhängige
Anweisung ist typischerweise ein Block. Jeder Anweisung innerhalb der
abhängigen Anweisung kann eine beliebige Anzahl von case-Marken
vorausgehen:

case constant-integer:

Jede dieser Konstanten darf nur einmal in einer switch-Anweisung vorkommen.


Eine case-Marke kann auch folgende Form haben:

default :

Zur Ausführung der switch-Anweisung wird der Ausdruck bewertet und mit
allen case-Konstanten verglichen. Wird eine case-Konstante gefunden, die
denselben Wert hat wie der Ausdruck, so wird die Ausführung des Programms
mit der Anweisung fortgesetzt, die dieser case-Marke folgt. Wird keine
passende case-Konstante gefunden, so wird die Ausführung bei einer default
case-Marke fortgesetzt, falls diese vorhanden ist.

6.8. "break" Anweisung

Die Anweisung

break;

sorgt für den Abbruch der nächstgelegenen do-, while-, oder switch-
Anweisung.

6.9. "continue" Anweisung

Die Anweisung

continue;

muß sich in der Abhängigkeit einer do- oder while-Anweisung befinden. Sie
sorgt dafür, daß die Ausführung des Programms an dem Punkt fortgestetzt
wird, an dem über die Wiederholung der nächstgelegenen Anweisung
entschieden wird.

6.10. "return" Anweisung

Wurde ein Job aufgerufen, so sorgt die return-Anweisung innerhalb des Jobs
dafür, daß der Job wieder verlassen wird. Der return-Anweisung kann eine

23
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

Stringvariable oder eine Stringkonstante mitgegeben werden. Dieser Wert wird


vom Laufzeitsystem dem Ergebnis JOBSTATUS im Erbebnissatz 0
zugewiesen. Die return-Anweisung hat folgende Form:

return {constant-string | string-expression};

24
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

7. Globale Vereinbarungen

Eine BEST/2 Beschreibungsdatei besteht aus einem Header und einer Folge
von Jobs:

program:
header
{ declaration }
job

7.1. Header

Die Definition eines Headers hat folgende Form:

header:
ecu : string;
origin : string;
revision : string;
author : string;
language : string;
uses : string;
comment : string;

Mit ecu wird die genaue Bezeichnung des Steuergerätes angegeben.


Mit origin wird der Author der Ersterstellung angegeben.
Mit revision wird die Version als mit Punkt getrenntes Zahlenpaar angegeben
(z.B. 1.0). Die beiden Zahlen müssen jeweils im Bereich 0-65535 liegen.
Mit author wird der Author der letzten Änderung angegeben.
Mit language wird die Sprache gekennzeichnet (optional).
Mit uses werden die Basisbeschreibungsdateien angegeben (optional).
Mit comment wird ein Kommentar angegeben. Es können auch mehrere
Kommentarzeilen angegeben werden.

Die Header-Definitionen können in den BEST/2-Jobs der jeweiligen


Beschreibungsdatei über VORDEFINIERTE MAKROS abgefragt werden.

7.2. Jobs

Die Definition eines Jobs hat folgende Form:

job:

25
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

job-header compound-statement

job-header:
job ( name : identifier ;
{ comment : string ; }
{[ argument : identifier ;
type : type-name | extra-type-name ;
{ comment : string ; } ]}
{[ result : identifier ;
type : type-name | extra-type-name ;
range : wert|string ;
defrslt : wert|string ;
{ comment : string ; } ]}
)

Der Jobheader definiert den Namen des Jobs, die Aufrufparameter und
möglichen Ergebnisse. Die Parameter sind Deklarationen mit möglichen
Initialisierungen. Diese Initialisierungen werden dann als Default-Ergebnisse
bzw. Aufrufparameter bewertet. Die Deklaration von Default-Ergebnissen ist
optional.

26
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

8. Geltungsbereiche

Globale Deklarationen gelten für alle Jobs innerhalb der Beschreibungsdatei.


Diese globalen Deklarationen deklarieren Konstanten! Diese sind nicht
veränderbar !

Deklarationen gelten sonst nur in dem Block, in dem sie beschrieben werden.

27
EDIABAS — BEST/2 SPRACHBESCHREIBUNG

9. Laufzeitbibliothek

Die Laufzeitbibliothek stellt Funktionen zur Kommunikation, Stringbehandlung,


Fehlerbehandlung usw. zur Verfügung. Die Funktionen der Laufzeitbibliothek
können vom Anwender nicht selber erstellt werden, da sie in BEST/1
geschrieben werden müssen.

Sie werden im Dokument "BEST/2 FUNKTIONSREFERENZ" dokumentiert.

28