Autor: Menno Rubingh Datum: 2009 Feb 16
| Notation | Bedeutung | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|  GROSS  |  Built-in Keyword  (Notation: Fett, alles Grossbuchstaben)  | |||||||||||||||
|  klein  |  Identifier (Name einer PROC, FUNC, TYPE, oder Variabele)  (Notation: Fett, alles Kleinbuchstaben  | |||||||||||||||
| Abc |  Nonterminal  (Notation: Italics, nicht Fett, Mix von gross und klein)  | |||||||||||||||
  
		 | End Of Line | |||||||||||||||
 
			   Abc   
		 |  
			Einfache optionale wiederholung:  Steht für: 0 oder mehr Male wiederholen von Abc.  | |||||||||||||||
 
    		   Abc   ,   
		 |  
			Optionale wiederholung mit Trennzeichen:  Steht für: 
  | |||||||||||||||
 
  Abc
     
		 | 
			Diese graphische Figur bezeichnet die Liste aller productions für Abc, d.h. aller
			Alternativen (entweder...oder...oder...) wie der Nonterminal Abc aufgelöst werden kann.  Jede einzelne prodiction kann in ihrer Darstellung in der Syntax-Spezifikation unten auch line breaks enthalten: Diese sind nur für die visuelle Darstellung da, zu leichterem Lesen, und stehen nicht für das input Token "  ".
		
 | 
[NB: Das Zeilen-weiterführungszeichen "_" wird vom Tokenizer aufgelöst, und
ist daher nicht da in der vom Parser zu verarbeitenden Token-Sequenz.]
    Program     
        
  
 PFTDef 
    PFTDef     
        
  ProcDefinition
        
  FuncDefinition
        
  TypeDefinition   //Später
    
NB: Die Namen der von einem Script verwendeten PROCS und FUNCS (und 
später auch: TYPEs) sind alle unterschiedlich.  
(D.h.: Alle in der gleichen namespace.)
    
    ProcDefinition     
        
  PROC procname ( 
 TypeSpec paramname 
 , 
 ) 
        
     StatementBlock
        
  END PROC 
    FuncDefinition     
        
  FUNC TypeSpec funcname ( 
 TypeSpec paramname 
 , 
 ) 
        
     StatementBlock
        
  END FUNC 
    TypeDefinition                  //Später
        
  TYPE typename 
        
     
 TypeSpec fieldname 
 
        
  END TYPE 
    TypeSpec
        
  BOOL
        
  INT
        
  REAL
        
  STRING
        
  STRING_T
        
  ARRAY < TypeSpec >
    
    StatementBlock
        
  
 Statement 
Es gibt die folgenden Arten von Statements:
    Statement
        
  EmptyStatement      // Leerzeile erlaubt in statement block
        
  VarDeclStatement    // Deklaration einer Variabele
        
  AssignmentStatement // Zuweisung
        
  IfStatement         // IF
        
  WhileStatement      // WHILE
        
  ForStatement        // FOR
        
  ProcCallStatement   // PROC Aufruf
        
  ReturnStatement     // Return aus FUNC
Das ReturnStatement ist nur erlaubt innerhalb einer FuncDefinition.
Jede Art Statement hat ihren eigenen Syntax:
    EmptyStatement
        
  
  //Leerzeile
    VarDeclStatement
        
  VAR TypeSpec varname 
        
  VAR TypeSpec varname = Expression 
    AssignmentStatement
        
  varname  = Expression 
        
  arrayname [ Expression ]  = Expression 
  //Array element
        
  varname . fieldname  = Expression 
        //Später für TYPE
    IfStatement
        
  IF Expression 
        
      StatementBlock
        
  END IF 
    WhileStatement
        
  WHILE Expression 
        
      StatementBlock
        
  END WHILE 
    ForStatement
        
  FOR varname = Expression .. Expression 
        
      StatementBlock
        
  END FOR 
    ProcCallStatement
        
  procname ( 
 Expression 
  , 
 ) 
        
  stringname . procname ( 
 Expression 
  , 
 ) 
  //Builtin STRING PROC
        
  arrayname  . procname ( 
 Expression 
  , 
 ) 
  //Builtin ARRAY PROC
    ReturnStatement 
        
  RETURN Expression 
Die Expressions in IF- und WHILE-statements müssen einen BOOL zurückgeben;
die Expressions in einem FOR-statement müssen INT-Werte zurückgeben.
    Expression
        
  SimpleLiteral
        
  { 
 Expression 
 , 
 }  //Gibt eine Array zurück
        
  varname
        
  arrayname [ Expression ]   //Array element
        
  varname . fieldname        //Später für TYPE
        
  funcname ( 
 Expression 
  , 
 )              //FUNC-Aufruf
        
  stringname . funcname ( 
 Expression 
  , 
 )   //Builtin STRING FUNC
        
  arrayname  . funcname ( 
 Expression 
  , 
 )   //Builtin ARRAY FUNC
        
  ( Expression )
        
  PrefixOperator  Expression
        
  Expression  InfixOperator  Expression
NB: Für die Auflösung der letzteren Möglichkeit muss der Parser die operator precedence 
der infix-Operatoren berücksichtigen.
    SimpleLiteral
        
  TRUE     //Bool
        
  FALSE
        
  Literal integer, zB: 73
        
  Literal real, zB: 1.2e-4
        
  String literal in double quotes, zB: "abc"
        
  NEWL      //Keywords die einen string zurückgeben
        
  SPACE
        
  TAB
        
  DQUOTE
        
  SQUOTE
    
    PrefixOperator
        
  NOT
    
        
  +
        
  -
    InfixOperator
        
  AND
        
  OR
        
  >
        
  <
        
  =          //Überprüfung auf Gleichheit, nicht Zuweisung
        
  >=
        
  <=
        
  +
        
  -
        
  *
        
  /