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 ;
IMPORTimport TYPE &? IDENTIFIER PARAMLIST FUNCATTR from STRING ;
import TYPE & IDENTIFIER PARAMLIST FUNCATTR from STRING ;
USINGusing namespace IDENTIFIER (:: IDENTIFIER)* ;
using namespace IDENTIFIER :: ;
NAMESPACEnamespace 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 }
MIXINmixin 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 , ;
TYPEDEFtypedef PRIMTYPE IDENTIFIER ;
typedef PRIMTYPE IDENTIFIER ;
INTFMTHDTYPE &? 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
TYPEconst? 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
PRIMTYPEvoid | 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
EXPRSTATASSIGN? ;
ASSIGN ;
SWITCHswitch ( ASSIGN ) { CASE* }
switch ( ASSIGN ) { CASE }
IFif ( ASSIGN ) STATEMENT (else STATEMENT)?
if ( ASSIGN ) STATEMENT else STATEMENT
TRYtry STATBLOCK catch STATBLOCK
try STATBLOCK catch STATBLOCK
FORfor ( (VAR | EXPRSTAT) EXPRSTAT (ASSIGN (, ASSIGN)*)? ) STATEMENT
for ( VAR EXPRSTAT EXPRSTAT ASSIGN , ) STATEMENT
FOREACHforeach ( TYPE IDENTIFIER (, TYPE IDENTIFIER)* : ASSIGN ) STATEMENT
foreach ( TYPE IDENTIFIER , : ASSIGN ) STATEMENT
WHILEwhile ( ASSIGN ) STATEMENT
while ( ASSIGN ) STATEMENT
DOWHILEdo STATEMENT while ( ASSIGN ) ;
do STATEMENT while ( ASSIGN ) ;
RETURNreturn ASSIGN? ;
return ASSIGN ;
BREAKbreak ;
break ;
CONTINUEcontinue ;
continue ;
EXPREXPRTERM (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
EXPRVALUEvoid | CONSTRUCTCALL | FUNCCALL | VARACCESS | CAST | LITERAL | ( ASSIGN ) | LAMBDA
void CONSTRUCTCALL FUNCCALL VARACCESS CAST LITERAL ( ASSIGN ) LAMBDA
CONSTRUCTCALLTYPE ARGLIST
TYPE ARGLIST
EXPRPREOP- | + | ! | ++ | -- | ~ | @
- + ! ++ -- ~ @
EXPRPOSTOP(. (FUNCCALL | IDENTIFIER)) | ([ (IDENTIFIER :)? ASSIGN (, (IDENTIFIER :)? ASSIGN)* ]) | ARGLIST | ++ | --
. FUNCCALL IDENTIFIER [ IDENTIFIER : ASSIGN , ] ARGLIST ++ --
CASTcast < TYPE > ( ASSIGN )
cast < TYPE > ( ASSIGN )
LITERALNUMBER | STRING | BITS | true | false | null
NUMBER STRING BITS true false null
LAMBDAfunction ( ((TYPE TYPEMOD)? IDENTIFIER? (, (TYPE TYPEMOD)? IDENTIFIER?)*)? ) STATBLOCK
function ( TYPE TYPEMOD IDENTIFIER , ) STATBLOCK
FUNCCALLSCOPE IDENTIFIER TEMPLTYPELIST? ARGLIST
SCOPE IDENTIFIER TEMPLTYPELIST ARGLIST
VARACCESSSCOPE IDENTIFIER
SCOPE IDENTIFIER
ARGLIST( (IDENTIFIER :)? ASSIGN (, (IDENTIFIER :)? ASSIGN)* )
( IDENTIFIER : ASSIGN , )
ASSIGNCONDITION ( ASSIGNOP ASSIGN )?
CONDITION ASSIGNOP ASSIGN
CONDITIONEXPR (? ASSIGN : ASSIGN)?
EXPR ? ASSIGN : ASSIGN
EXPROPMATHOP | 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 """
BITS0[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-2025 Andreas Jönsson), Sep 2026