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
>=
<=
+
-
*
/