Difference between revisions of "NXSL Formal Grammar"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
< | <syntaxhighlight lang="abnf"> | ||
script ::= | script ::= | ||
module | | module | | ||
Line 164: | Line 164: | ||
UINT64 ::= {INTEGER}(UL|LU) | UINT64 ::= {INTEGER}(UL|LU) | ||
REAL ::= \-?[0-9]+\.[0-9]+ | REAL ::= \-?[0-9]+\.[0-9]+ | ||
</ | </syntaxhighlight> |
Revision as of 08:46, 15 May 2012
script ::=
module |
expression
module ::=
module_component { module_component }
module_component ::=
function |
statement_or_block |
use_statement
use_statement ::=
use any_identifier ";"
any_identifier ::=
IDENTIFIER |
COMPOUND_IDENTFIER
function ::=
sub IDENTIFIER "(" [ identifier_list ] ")" block
identifier_list ::=
IDENTIFIER { "," IDENTIFIER }
block ::=
"{" { statement_or_block } "}"
statement_or_block ::=
statement |
block
statement ::=
expression ";" |
builtin_statement |
";"
builtin_statement ::=
simple_statement ";" |
if_statement |
do_statement |
while_statement |
for_statement |
foreach_statement |
switch_statement |
array_statement |
break ";"
continue ";"
simple_statement ::=
keyword [ expression ]
keyword ::=
exit |
print |
println |
return
if_statement ::=
if "(" expression ")" statement_or_block [ else statement_or_block ]
for_statement ::=
for "(" expression ";" expression ";" expression ")" statement_or_block
foreach_statement ::=
foreach "(" IDENTIFIER ":" expression ")" statement_or_block
while_statement ::=
while "(" expression ")" statement_or_block
do_statement ::=
do statement_or_block while "(" expression ")" ";"
switch_statement ::=
switch "(" expression ")" "{" case { case } [ default ] "}"
case ::=
case constant ":" { statement_or_block }
default ::=
default ":" { statement_or_block }
array_statement ::=
array identifier_list ";"
expression ::=
"(" expression ")" |
IDENTIFIER "=" expression |
expression "->" IDENTIFIER |
"-" expression |
"!" expression |
"~" expression |
inc IDENTIFIER |
dec IDENTIFIER |
IDENTIFIER inc |
IDENTIFIER dec |
expression "+" expression |
expression "-" expression |
expression "*" expression |
expression "/" expression |
expression "%" expression |
expression like expression |
expression ilike expression |
expression "~=" expression |
expression match expression |
expression imatch expression |
expression "==" expression |
expression "!=" expression |
expression "<" expression |
expression "<=" expression |
expression ">" expression |
expression ">=" expression |
expression "&" expression |
expression "|" expression |
expression "^" expression |
expression "&&" expression |
expression "||" expression |
expression "<<" expression |
expression ">>" expression |
expression "." expression |
expression "?" expression ":" expression |
operand
operand ::=
function_call |
type_cast |
constant |
IDENTIFIER
type_cast ::=
builtin_type "(" expression ")"
builtin_type ::=
int32 |
int64 |
uint32 |
uint64 |
real |
string
function_call ::=
IDENTIFIER "(" [ expression { "," expression } ] ")"
constant ::=
STRING |
INT32 |
INT64 |
UINT32 |
UINT64 |
REAL |
NULL
</source>
'''Terminal symbols'''
<source>
IDENTIFIER ::= [A-Za-z_\$][A-Za-z_\$0-9]*
COMPOUND_IDENTIFIER ::= { IDENTIFIER}(::{ IDENTIFIER})+
INTEGER ::= \-?(0x)?[0-9]+
INT32 ::= INTEGER
INT64 ::= {INTEGER}L
UINT32 ::= {INTEGER}U
UINT64 ::= {INTEGER}(UL|LU)
REAL ::= \-?[0-9]+\.[0-9]+