Zum Inhalt

Syntaxdiagramme

Program

Program.png

ObjectDefinition

ObjectDefinition.png

Statement

Statement.png

IfStatement

IfStatement.png

WhileStatement

WhileStatement.png

ForStatement

ForStatement.png

DoWhileStatement

DoWhileStatement.png

SwitchStatement

SwitchStatement.png

BreakStatement

BreakStatement.png

ContinueStatement

ContinueStatement.png

ReturnStatement

ReturnStatement.png

Expression

Expression.png

JsonExpression

JsonExpression.png

Identifier

Identifier.png

Call

Call.png

Argument

Argument.png

Array

Array.png

Matrix

Matrix.png

ConditionalExpression

ConditionalExpression.png

ObjectType

ObjectType.png

IdentifierPart

IdentifierPart.png

Name

Name.png

PrefixOperator

PrefixOperator.png

SuffixOperator

SuffixOperator.png

BinaryOperator

BinaryOperator.png

AssignOperator

AssignOperator.png

Integer

Integer.png

HexConstant

HexConstant.png

FloatingPoint

FloatingPoint.png

Imaginary

Imaginary.png

StringConstant

StringConstant.png

CharacterConstant

CharacterConstant.png

JsonString

JsonString.png

RawString

RawString.png

Boolean

Boolean.png

Digit

Digit.png

Letter

Letter.png

HexDigit

HexDigit.png

Character

Character.png

XMLCharacter

XMLCharacter.png

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]