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äterNB: 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 FUNCDas 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 ExpressionDie 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 ExpressionNB: 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 >= <= + - * /