DWS Defined Using EBNF |
Top Previous Next Contents Index |
Syntax of DelphiWebScript II in EBNF
The description of the syntax uses the EBNF ("Enhanced Backus Naur Form").
• | [ ] = Optional |
• | { } = Zero, one or many times |
• | Names in capital letters are symbols (non-terminals) |
• | Names in quotes ("name") are part of the input string (terminals) |
Syntax
The start non-terminal is SCRIPT
SCRIPT =
[ ROOTSTATEMENT { ";" ROOTSTATEMENT } [ ";" ] ]
ROOTSTATEMENT =
TYPEDECL |
PROCDECL |
STATEMENT
STATEMENT =
VARDECL |
CONSTDECL |
BLOCK
VARDECL =
"var" NAME ":" TYPEDEF [ "=" EXPR ]
TYPEDECL =
"type" NAME "=" TYPEDEF
TYPEDEF =
"Boolean" | "Integer" | "Float" | "String" | "DateTime" | "Variant"
NAME |
ENUMDEF |
ARRAYDEF |
RECORDDEF |
CLASSDEF
ENUMDEF =
"(" NAME [ "=" EXPR ] { "," NAME [ "=" EXPR ] } ")"
ARRAYDEF =
"array" "[" EXPR ".." EXPR {"," EXPR ".." EXPR} "]" "of" TYPEDEF |
"array" "of" TYPEDEF
RECORDDEF =
"record" ARGLIST "end"
ARGLIST =
ARGDECL { ";" ARGDECL }
ARGDECL =
NAME ":" TYPEDEF
CLASSDEF =
"class" [ "(" NAME ")" ]
[ "private" | "public" | "protected" ]
[ ARGLIST ";" ]
[ METHODDECL { ";" METHODDECL } ";" ]
[ "property" NAME [ "[" ARGLIST "]" ] ":" TYPEDEF [ "read" NAME ] [ "write" NAME ] ";" ] [ "default" ";" ]
"end"
METHODDECL =
[ "class" ] "procedure" NAME ["(" [ARGLIST] ")"] [ ";" "override" | "virtual" | "reintroduce" ] |
[ "class" ] "function" NAME ["(" [ARGLIST] ")"] ":" TYPEDEF [ ";" "override" | "virtual" | "reintroduce" ] |
"constructor" NAME ["(" [ARGLIST] ")"] [ ";" "override" | "virtual" | "reintroduce" ] |
"destructor" NAME ["(" [ARGLIST] ")"] [ ";" "override" | "virtual" | "reintroduce" ]
PROCDECL =
PROCHEAD ";" PROCBODY |
PROCHEAD ";" "forward" |
METHODDEF ";" PROCBODY
PROCHEAD
"procedure" NAME ["(" [ARGLIST] ")"]
"function" NAME ["(" [ARGLIST] ")"] ":" TYPEDEF
PROCBODY =
{VARDECL ";"} "begin" SCRIPT "end"
METHODDEF =
[ "class" ] "procedure" NAME "." NAME ["(" [ARGLIST] ")"] |
[ "class" ] "function" NAME "." NAME ["(" [ARGLIST] ")"] ":" TYPEDEF |
"constructor" NAME "." NAME ["(" [ARGLIST] ")"] |
"destructor" NAME "." NAME ["(" [ARGLIST] ")"]
CONSTDECL =
"const" NAME "=" EXPR
BLOCK =
"begin" [STATEMENT {";" STATEMENT} [";"]] "end" |
INSTR
INSTR =
"if" EXPR "then" BLOCK |
"if" EXPR "then" BLOCK "else" BLOCK |
CASEINSTR |
"for" VAR ":=" EXPR "to" EXPR "do" BLOCK |
"for" VAR ":=" EXPR "downto" EXPR "do" BLOCK |
"while" EXPR "do" BLOCK |
"repeat" [BLOCK {";" BLOCK} [";"]] "until" EXPR |
VAR ":=" EXPR |
FUNC |
EXCEPT |
FINALLY |
BLOCK
CASECOND =
EXPR |
EXPR ".." EXPR |
CASEINSTR =
"case" EXPR "of"
{ CASECOND {"," CASECOND } : BLOCK ";" }
[ "default" ":" BLOCK ";" ]
"end"
FUNC =
NAME [ "(" [EXPR {, EXPR}] ")" ]
EXCEPT =
"try"
BLOCK { ";" BLOCK } [ ";" ]
"except"
{ "on" NAME ":" NAME "do" BLOCK; }
"end"
FINALLY =
"try"
BLOCK { ";" BLOCK } [ ";" ]
"finally"
{ "on" NAME ":" NAME "do" BLOCK; }
"end"
EXPR =
EXPRADD [ "=" | "+" | "-" | "OR" EXPRADD]
EXPRADD =
EXPRMUL [ "+" | "-" | "OR" EXPRADD]
EXPRMUL =
TERM [ "*" | "/" | "mod" | "div" EXPRMUL]
TERM =
"+" TERM |
"-" TERM |
"not" TERM |
CONST |
VAR |
FUNC |
"(" EXPR ")"
"[" [ EXPR { "," EXPR } ] "]"
CONST =
INT |
HEXINT |
FLOAT |
STR |
CHAR |
"True" |
"False"
VAR =
NAME |
NAME "[" INT "]" |
NAME "." VAR |
VAR "." FUNC
NAME =
LIT {LIT | "0".."9" | "_"}
LIT =
"A".."Z", "a".."z"
STR =
CHAR |
STRING { CHAR [ STRING ] }
STRING =
" ' " { STRINGCHAR } " ' " { " ' " STRING }
STRINGCHAR =
ASCII(0)..ASCII(255) - " ' " - ASCII(13) | " ' ' "
CHAR =
"#" INT | "#" HEXINT
HEXINT =
"$" HEXNUM { HEXNUM }
HEXNUM =
"0".."9"|"A".."F"|"a".."f"
FLOAT =
INT [ "." INT] [ "E" | "e" ["+" | "-" ] INT ]
INT =
NUM {NUM}
NUM =
"0".."9"
Reserved Words
• | and |
• | array |
• | as |
• | begin |
• | case |
• | class |
• | const |
• | constructor |
• | destructor |
• | div |
• | do |
• | downto |
• | else |
• | end |
• | except |
• | finally |
• | for |
• | forward |
• | function |
• | if |
• | inherited |
• | is |
• | label |
• | mod |
• | nil |
• | not |
• | of |
• | or |
• | procedure |
• | property |
• | raise |
• | record |
• | repeat |
• | string |
• | then |
• | to |
• | try |
• | type |
• | until |
• | var |
• | while |
• | xor |
(This topic is from the DWS project and is distributed per the MOZILLA PUBLIC LICENSE Version 1.1.)
Send comments or questions about web site to webmaster@ascendis.com |
Modified January 17, 2024, 3:45 pm
|