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 | |||||||||||||||
![]() ![]() |
Einfache optionale wiederholung: Steht für: 0 oder mehr Male wiederholen von 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.]
ProgramNB: 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.)![]()
PFTDef
PFTDef
ProcDefinition
FuncDefinition
TypeDefinition //Später
ProcDefinitionPROC 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:
StatementDas ReturnStatement ist nur erlaubt innerhalb einer FuncDefinition.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
Jede Art Statement hat ihren eigenen Syntax:
EmptyStatementDie Expressions in IF- und WHILE-statements müssen einen BOOL zurückgeben; die Expressions in einem FOR-statement müssen INT-Werte zurückgeben.![]()
//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
![]()
ExpressionNB: Für die Auflösung der letzteren Möglichkeit muss der Parser die operator precedence der infix-Operatoren berücksichtigen.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
SimpleLiteralTRUE //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
>=
<=
+
-
*
/