Previous Contents Next

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
Previous Contents Next