Previous Contents Next

A   Abstrakte Syntax

Team: Karsten Stahl, Martin Steffen, und alle anderen



Folgende erweiterte BNF-Notation faßt die abstrakte Syntax als gemeinsame Zwischenrepresentierung zusammen. Abgesehen von einigen Namenkonventionen (Großschreibung) ist die Umsetzung in Java trivial. Jeder nichtterminale Eintrag wird ein Klasse. Alternativen, gekennzeichnet durch |, sind Unterklassen der abstrakten Klasse, deren Unterfälle sie bilden. Die Einträge der mittleren Spalte werden als Felder der Klassen repräsentiert. Die Konstruktoren sind, bis auf die Reihenfolge der Argumente, durch die Felder der Klasse festgelegt.1 Die Listen der EBNF wurden als java.lang.Enumeration-Klassen implementiert. Graphische Information zur Positionierung, die nur für den Editor relevant ist, wurde nicht mit in die EBNF mit aufgenomment.



                      SFC ::=  istep      : step
                               steps      : step list
                               transs     : transition list
                               actions    : action list
                               declist    : declaration list
                     step ::=  name       : string
                               actions    : stepaction list
               stepaction ::=  qualifier  : action_qualifier
                               a_name     : string
                   action ::=  a_name     : string
                               sap        : stmt list  (* simple assignment program *)
                    stmt  ::=               skip
                           |                assign
                   assign ::=  var        : variable
                               val        : expr
                 variable ::=  name       : string
                               type       : type
         action_qualifier ::=  Nqual                            (* may be extended *)

               transition ::=  source     : step list
                               guard      : expr
                               target     : step list

              declaration ::=  var        : variable
                               type       : type
                               val        : constval

               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 *)
                           |                AND | OR | NEG              (* Konstanten in expr *)
                           |                LESS | GREATER | LEQ | GEQ | EQ 
                constval  ::=               ...| -2 | -1 | 0 | 1 | ... | true | false
                type      ::=               inttype
                           |                booltype
last generated May 17, 2001 (©Public License)
Previous Contents Next