Graphomata

AngelScript Syntax Diagrams*

SCRIPT⟶(IMPORT | ENUM | TYPEDEF | CLASS | MIXIN | INTERFACE | FUNCDEF | VIRTPROP | VAR | FUNC | NAMESPACE | USING | ;)*
IMPORT ENUM TYPEDEF CLASS MIXIN INTERFACE FUNCDEF VIRTPROP VAR FUNC NAMESPACE USING ;
IMPORT⟶import TYPE &? IDENTIFIER PARAMLIST FUNCATTR from STRING ;
import TYPE & IDENTIFIER PARAMLIST FUNCATTR from STRING ;
USING⟶using namespace IDENTIFIER (:: IDENTIFIER)* ;
using namespace IDENTIFIER :: ;
NAMESPACE⟶namespace IDENTIFIER (:: IDENTIFIER)* { SCRIPT }
namespace IDENTIFIER :: { SCRIPT }
ENUM⟶(shared | external)* enum IDENTIFIER (; | ({ IDENTIFIER (= EXPR)? (, IDENTIFIER (= EXPR)?)* }))
shared external enum IDENTIFIER ; { IDENTIFIER = EXPR , }
FUNCDEF⟶(external | shared)* funcdef TYPE &? IDENTIFIER PARAMLIST ;
external shared funcdef TYPE & IDENTIFIER PARAMLIST ;
FUNC⟶(shared | external)* (private | protected)? (((TYPE &?) | ~))? IDENTIFIER PARAMLIST const? FUNCATTR (; | STATBLOCK)
shared external private protected TYPE & ~ IDENTIFIER PARAMLIST const FUNCATTR ; STATBLOCK
VIRTPROP⟶(private | protected)? TYPE &? IDENTIFIER { ((get | set) const? FUNCATTR (STATBLOCK | ;))* }
private protected TYPE & IDENTIFIER { get set const FUNCATTR STATBLOCK ; }
INTERFACE⟶(external | shared)* interface IDENTIFIER (; | ((: IDENTIFIER (, IDENTIFIER)*)? { (VIRTPROP | INTFMTHD)* }))
external shared interface IDENTIFIER ; : IDENTIFIER , { VIRTPROP INTFMTHD }
MIXIN⟶mixin CLASS
mixin CLASS
CLASS⟶(shared | abstract | final | external)* class IDENTIFIER (; | ((: IDENTIFIER (, IDENTIFIER)*)? { (VIRTPROP | FUNC | VAR | FUNCDEF)* }))
shared abstract final external class IDENTIFIER ; : IDENTIFIER , { VIRTPROP FUNC VAR FUNCDEF }
VAR⟶(private|protected)? TYPE IDENTIFIER (( = (INITLIST | EXPR)) | ARGLIST)? (, IDENTIFIER (( = (INITLIST | EXPR)) | ARGLIST)?)* ;
private protected TYPE IDENTIFIER = INITLIST EXPR ARGLIST , ;
TYPEDEF⟶typedef PRIMTYPE IDENTIFIER ;
typedef PRIMTYPE IDENTIFIER ;
INTFMTHD⟶TYPE &? IDENTIFIER PARAMLIST const? ;
TYPE & IDENTIFIER PARAMLIST const ;
STATBLOCK⟶{ (VAR | STATEMENT | USING)* }
{ VAR STATEMENT USING }
PARAMLIST⟶( (void | (TYPE TYPEMOD (... | IDENTIFIER? (= EXPR)?) (, TYPE TYPEMOD (... | IDENTIFIER? (= EXPR)?))*))? )
( void TYPE TYPEMOD ... IDENTIFIER = EXPR , )
TYPEMOD⟶(& (in | out | inout)?)?
& in out inout
TYPE⟶const? SCOPE DATATYPE TEMPLTYPELIST? ( ([ ]) | (@ const?) )*
const SCOPE DATATYPE TEMPLTYPELIST [ ] @ const
TEMPLTYPELIST⟶< TYPE (, TYPE)* >
< TYPE , >
INITLIST⟶{ (ASSIGN | INITLIST)? (, (ASSIGN | INITLIST)?)* }
{ ASSIGN INITLIST , }
SCOPE⟶::? (IDENTIFIER ::)* (IDENTIFIER TEMPLTYPELIST? ::)?
:: IDENTIFIER :: IDENTIFIER TEMPLTYPELIST ::
DATATYPE⟶(IDENTIFIER | PRIMTYPE | ? | auto)
IDENTIFIER PRIMTYPE ? auto
PRIMTYPE⟶void | int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | float | double | bool
void int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float double bool
FUNCATTR⟶(override | final | explicit | property | delete)*
override final explicit property delete
STATEMENT⟶(IF | FOR | FOREACH | WHILE | RETURN | STATBLOCK | BREAK | CONTINUE | DOWHILE | SWITCH | EXPRSTAT | TRY)
IF FOR FOREACH WHILE RETURN STATBLOCK BREAK CONTINUE DOWHILE SWITCH EXPRSTAT TRY
EXPRSTAT⟶ASSIGN? ;
ASSIGN ;
SWITCH⟶switch ( ASSIGN ) { CASE* }
switch ( ASSIGN ) { CASE }
IF⟶if ( ASSIGN ) STATEMENT (else STATEMENT)?
if ( ASSIGN ) STATEMENT else STATEMENT
TRY⟶try STATBLOCK catch STATBLOCK
try STATBLOCK catch STATBLOCK
FOR⟶for ( (VAR | EXPRSTAT) EXPRSTAT (ASSIGN (, ASSIGN)*)? ) STATEMENT
for ( VAR EXPRSTAT EXPRSTAT ASSIGN , ) STATEMENT
FOREACH⟶foreach ( TYPE IDENTIFIER (, TYPE IDENTIFIER)* : ASSIGN ) STATEMENT
foreach ( TYPE IDENTIFIER , : ASSIGN ) STATEMENT
WHILE⟶while ( ASSIGN ) STATEMENT
while ( ASSIGN ) STATEMENT
DOWHILE⟶do STATEMENT while ( ASSIGN ) ;
do STATEMENT while ( ASSIGN ) ;
RETURN⟶return ASSIGN? ;
return ASSIGN ;
BREAK⟶break ;
break ;
CONTINUE⟶continue ;
continue ;
EXPR⟶EXPRTERM (EXPROP EXPRTERM)*
EXPRTERM EXPROP EXPRTERM
CASE⟶((case EXPR) | default) : STATEMENT*
case EXPR default : STATEMENT
EXPRTERM⟶((TYPE =)? INITLIST) | (EXPRPREOP* EXPRVALUE EXPRPOSTOP*)
TYPE = INITLIST EXPRPREOP EXPRVALUE EXPRPOSTOP
EXPRVALUE⟶void | CONSTRUCTCALL | FUNCCALL | VARACCESS | CAST | LITERAL | ( ASSIGN ) | LAMBDA
void CONSTRUCTCALL FUNCCALL VARACCESS CAST LITERAL ( ASSIGN ) LAMBDA
CONSTRUCTCALL⟶TYPE ARGLIST
TYPE ARGLIST
EXPRPREOP⟶- | + | ! | ++ | -- | ~ | @
- + ! ++ -- ~ @
EXPRPOSTOP⟶(. (FUNCCALL | IDENTIFIER)) | ([ (IDENTIFIER :)? ASSIGN (, (IDENTIFIER :)? ASSIGN)* ]) | ARGLIST | ++ | --
. FUNCCALL IDENTIFIER [ IDENTIFIER : ASSIGN , ] ARGLIST ++ --
CAST⟶cast < TYPE > ( ASSIGN )
cast < TYPE > ( ASSIGN )
LITERAL⟶NUMBER | STRING | BITS | true | false | null
NUMBER STRING BITS true false null
LAMBDA⟶function ( ((TYPE TYPEMOD)? IDENTIFIER? (, (TYPE TYPEMOD)? IDENTIFIER?)*)? ) STATBLOCK
function ( TYPE TYPEMOD IDENTIFIER , ) STATBLOCK
FUNCCALL⟶SCOPE IDENTIFIER TEMPLTYPELIST? ARGLIST
SCOPE IDENTIFIER TEMPLTYPELIST ARGLIST
VARACCESS⟶SCOPE IDENTIFIER
SCOPE IDENTIFIER
ARGLIST⟶( (IDENTIFIER :)? ASSIGN (, (IDENTIFIER :)? ASSIGN)* )
( IDENTIFIER : ASSIGN , )
ASSIGN⟶CONDITION ( ASSIGNOP ASSIGN )?
CONDITION ASSIGNOP ASSIGN
CONDITION⟶EXPR (? ASSIGN : ASSIGN)?
EXPR ? ASSIGN : ASSIGN
EXPROP⟶MATHOP | COMPOP | LOGICOP | BITOP
MATHOP COMPOP LOGICOP BITOP
MATHOP⟶+ | - | * | / | % | **
+ - * / % **
COMPOP⟶== | != | < | <= | > | >= | is | !is
== != < <= > >= is !is
LOGICOP⟶&& | || | ^^ | and | or | xor
&& || ^^ and or xor
BITOP⟶& | | | ^ | << | >> | >>>
& | ^ << >> >>>
ASSIGNOP⟶= | += | -= | *= | /= | |= | &= | ^= | %= | **= | <<= | >>= | >>>=
= += -= *= /= |= &= ^= %= **= <<= >>= >>>=
IDENTIFIER⟶[A-Za-z_][A-Za-z0-9_]* // single token: starts with letter or _, can include any letter and digit, same as in C++
NUMBER⟶[0-9]+("."[0-9]+)? // single token: includes integers and real numbers, same as C++
STRING⟶" ("\". | [^"\#x0D\#x0A\\])* " // single token: single quoted ', double quoted ", or heredoc multi-line string """
BITS⟶0[bBoOdDxX][0-9A-Fa-f]+ // single token: binary 0b or 0B, octal 0o or 0O, decimal 0d or 0D, hexadecimal 0x or 0X
COMMENT⟶(//[^\#x0A]*) | (/*[^*]**/') // single token: starts with // and ends with new line or starts with /* and ends with */
WHITESPACE⟶[ \#x09\#x0A\#x0D]+ // single token: spaces, tab, carriage return, line feed, and UTF8 byte-order-mark

* Generated from AngelScript EBNF (copyright (c) 2003-2026 Andreas Jönsson), Sep 2026