B Abstrakte Syntax
Folgende erweiterte BNF-Notation faßt die abstrakte Syntax
als gemeinsame Zwischenrepresentierung zusammen. Abgesehen von einigen
Namenkonventionen (Großschreibgung) ist die Umsetzung in Java trivial.
Jeder nichtterminale Eintrag wird ein Klasse. Alternativen,
gekennzeichnet durch |, sind Unterklassen derabstrakten
Klasse, deren Unterfälle sie bilden. Die Einträge der mittlere Spalte
wird als Felder der Klassen repräsentiert. Die Konstruktoren sind,
bis auf die Reihenfolge der Argument, durch die Felder der Klasse
festgelegt.1
sequential_function_chart ::= istep : step
steps : step list
trans : transition list
actions : action list
step ::= a_name : string
actions : action list
action ::= qualifier : action_qualifier
sap : sap (* simple assignement program *)
sap ::= stmt list
stmt ::= skip
| assign
assign ::= variable * expr
variable ::= name : string
type : type
action_qualifier ::= Nqual
transition ::= source : step list
guard : expr
target : step list
expr ::= b_expr
| u_expr
| constval
| variable
b_expr ::= left_expr : expr
right_expr : expr
op : operand
type : type
u_expr ::= sub_expr : expr
op : operand
type : type
operand ::= PLUS | MINUS | TIMES | DIV (* Operand als Konstanten in expr *)
| AND | OR | NEG
| LESS | GREATER | LEQ | GEQ | EQ
type ::= int
| bool
©Public License