Syntaxdiagramme

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]