---
title: "Syntaxdiagramme"
---
### Program

![Program.png](../../../attachments/3344260/3367608.png)

### ObjectDefinition

![ObjectDefinition.png](../../../attachments/3344260/3367553.png)

### Statement

![Statement.png](../../../attachments/3344260/3367817.png)

### IfStatement

![IfStatement.png](../../../attachments/3344260/3367696.png)

### WhileStatement

![WhileStatement.png](../../../attachments/3344260/3367823.png)

### ForStatement

![ForStatement.png](../../../attachments/3344260/3367888.png)

### DoWhileStatement

![DoWhileStatement.png](../../../attachments/3344260/3367443.png)

### SwitchStatement

![SwitchStatement.png](../../../attachments/3344260/3367834.png)

### BreakStatement

![BreakStatement.png](../../../attachments/3344260/3367393.png)

### ContinueStatement

![ContinueStatement.png](../../../attachments/3344260/3367421.png)

### ReturnStatement

![ReturnStatement.png](../../../attachments/3344260/3367784.png)

### Expression

![Expression.png](../../../attachments/3344260/3367657.png)

### JsonExpression

![JsonExpression.png](../../../attachments/3344260/3367712.png)

### Identifier

![Identifier.png](../../../attachments/3344260/3367674.png)

### Call

![Call.png](../../../attachments/3344260/3367801.png)

### Argument

![Argument.png](../../../attachments/3344260/3367547.png)

### Array

![Array.png](../../../attachments/3344260/3367536.png)

### Matrix

![Matrix.png](../../../attachments/3344260/3367751.png)

### ConditionalExpression

![ConditionalExpression.png](../../../attachments/3344260/3367432.png)

### ObjectType

![ObjectType.png](../../../attachments/3344260/3367586.png)

### IdentifierPart

![IdentifierPart.png](../../../attachments/3344260/3367663.png)

### Name

![Name.png](../../../attachments/3344260/3367564.png)

### PrefixOperator

![PrefixOperator.png](../../../attachments/3344260/3367575.png)

### SuffixOperator

![SuffixOperator.png](../../../attachments/3344260/3367624.png)

### BinaryOperator

![BinaryOperator.png](../../../attachments/3344260/3367371.png)

### AssignOperator

![AssignOperator.png](../../../attachments/3344260/3367382.png)

### Integer

![Integer.png](../../../attachments/3344260/3367723.png)

### HexConstant

![HexConstant.png](../../../attachments/3344260/3367877.png)

### FloatingPoint

![FloatingPoint.png](../../../attachments/3344260/3367641.png)

### Imaginary

![Imaginary.png](../../../attachments/3344260/3367685.png)

### StringConstant

![StringConstant.png](../../../attachments/3344260/3367630.png)

### CharacterConstant

![CharacterConstant.png](../../../attachments/3344260/3367861.png)

### JsonString

![JsonString.png](../../../attachments/3344260/3367729.png)

### RawString

![RawString.png](../../../attachments/3344260/3367795.png)

### Boolean

![Boolean.png](../../../attachments/3344260/3367410.png)

### Digit

![Digit.png](../../../attachments/3344260/3367454.png)

### Letter

![Letter.png](../../../attachments/3344260/3367762.png)

### HexDigit

![HexDigit.png](../../../attachments/3344260/3367740.png)

### Character

![Character.png](../../../attachments/3344260/3365011.png)

### XMLCharacter

![XMLCharacter.png](../../../attachments/3344260/3367855.png)

### EBNF Syntaxbeschreibung

Eine Visualisierung kann auf [https://www.bottlecaps.de/rr/ui](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]`
