Syntaxdiagramme
Program¶

ObjectDefinition¶

Statement¶

IfStatement¶

WhileStatement¶

ForStatement¶

DoWhileStatement¶

SwitchStatement¶

BreakStatement¶

ContinueStatement¶

ReturnStatement¶

Expression¶

JsonExpression¶

Identifier¶

Call¶

Argument¶

Array¶

Matrix¶

ConditionalExpression¶

ObjectType¶

IdentifierPart¶

Name¶

PrefixOperator¶

SuffixOperator¶

BinaryOperator¶

AssignOperator¶

Integer¶

HexConstant¶

FloatingPoint¶

Imaginary¶

StringConstant¶

CharacterConstant¶

JsonString¶

RawString¶

Boolean¶

Digit¶

Letter¶

HexDigit¶

Character¶

XMLCharacter¶

EBNF Syntaxbeschreibung¶
Eine Visualisierung kann auf https://www.bottlecaps.de/rr/ui erstellt werden
Program ::= ( ObjectDefinition )+
ObjectDefinition ::= ObjectType Name ( "(" Name ( "," Name )* ")" )? ( ":" Name ( "(" Expression ( "," Expression )* ")" )? )? "{" ( Statement )* "}" ";"
Statement ::= ";" | Expression ";" | "{" ( Statement )* "}" | IfStatement | WhileStatement | ForStatement | DoWhileStatement | ObjectDefinition | SwitchStatement | BreakStatement | ContinueStatement | ReturnStatement
ReturnStatement ::= "return " Expression ";"
BreakStatement ::= "break" ";"
ContinueStatement ::= "continue" ";"
IfStatement ::= "if" "(" Expression ")" Statement ( "else" Statement )?
WhileStatement ::= "while" "(" Expression ")" Statement
DoWhileStatement ::= "do" Statement "while" "(" Expression ")" ";"
ForStatement ::= "for" "(" ( Expression )? ";" ( Expression )? ";" ( Expression )? ")" Statement
SwitchStatement ::= "switch" "(" Expression ")" "{" ( "case" Expression ( ".." Expression )? ":" "{" ( Statement )* "}" )* ( "default" ":" "{" ( Statement )* "}" )? "}"
Expression ::= ( PrefixOperator )* ( Integer | Imaginary | HexConstant | StringConstant | CharacterConstant | RawString | Boolean | "null" | Array | Matrix | ConditionalExpression | Call | Identifier ( ( ( "." | "@" ) Identifier )+ | ( ( ".<" | "@<") Name ":=" Expression )? )? | "(" Expression ")" ) ( SuffixOperator )? ( ( BinaryOperator | AssingOperator ) Expression )?
JsonExpression ::= "{" ( StringConstant ":" (JsonExpression | Expression ) ("," StringConstant ":" (JsonExpression | Expression ))* )? "}" | "[" ( (JsonExpression | Expression ) ("," (JsonExpression | Expression ))* )? "]"
Identifier ::= ("_" | Letter ) ( ( "_" | Digit | Letter | IdentifierPart )* ( ".[" Expression "]" | "[" Expression "]" )* ( "." IdentifierPart )? )*
Call ::= Identifier "(" ( Argument ( "," Argument)* )? ")"
Argument ::= Expression | ( "&" Identifier )
Array ::= "[" ( Expression ( "," Expression )* )? "]"
Matrix ::= "[" Array ( "," Array )* "]"
ConditionalExpression ::= Expression "?" Expression ":" Expression
ObjectType ::= "object" | "global" | "function" | "main"
IdentifierPart ::= "{" Expression "}"
Name ::= ("_" | Letter ) ( "_" | Digit | Letter | IdentifierPart )*
PrefixOperator ::= "-" | "+" | "~" | "!" | "++" | "--" | "`"
SuffixOperator ::= "++" | "--"
BinaryOperator ::= "+" | "-" | "*" | "/" | "&" | "|" | "^" | "%" | "&&" | "||" | "^^" | "**" | "<" | ">" | "<<" | ">>" | "==" | "<=" | ">=" | "!=" | ".*" | ".**" | "./" | "in" | "."
AssignOperator ::= "=" | ":=" | "+=" | "-=" | "*=" | "/=" | "&=" | "|=" | "^=" | "&&=" | "||=" | "^^=" | "**="
Integer ::= Digit ( Digit )*
HexConstant ::= ("0x" | "0X") HexDigit ( HexDigit )*
FloatingPoint ::= ( "+" | "-" )? ( Digit )+ ( "." ( Digit )+ ( ( "e" | "E" ) ( "+" | "-" )? ( Digit )+ )? )? | "NaN"
Imaginary ::= FloatingPoint "i"
StringConstant ::= '"' ( ( Character | "\n" | "\r" | "\t" | "\a" | "\b" | "\f" | "\v" | "\\" | '\"' | "\?" | "\'" | "\" [0-3] [0-7]* | "u" HexDigit+ )* )+ '"'
CharacterConstant ::= "'" ( ( Character | "\n" | "\r" | "\t" | "\a" | "\b" | "\f" | "\v" | "\\" | '\"' | "\?" | "\'" | "\" [0-3] [0-7]* | "u" HexDigit+ )* )+ "'"
JsonString ::= '"' ( ( Character | "\n" | "\r" | "\t" | "\a" | "\b" | "\f" | "\v" | "\\" | '\"' | "\?" | "\'" | "\" [0-3] [0-7]* | "u" HexDigit+ | "\/" )* )+ '"'
RawString ::= "R" '"' RawStringDelimiter "(" ( Character | "`" Expression "`" )* ")" RawStringDelimiter '"'
Boolean ::= "true" | "false"
Digit ::= [0-9]
Letter ::= [a-z] | [A-Z]
HexDigit ::= [a-fA-F] | Digit
Character ::= [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
XMLCharacter ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]