====================
 SYNTAX OF SCRIPTS:
====================

The description of the syntax uses the EBNF ("Enhanced Bachus Nauer Form")


SCRIPT = 
	{CONSTDECL}	{ANW}

CONSTDECL =
	"const" "=" CONST ";"
	
ANW = 	
	"if" EXPR "then" BLOCK |
	"if" EXPR "then" BLOCK "else" BLOCK |
	"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 |
	BLOCK 

BLOCK = 
	"begin" [BLOCK {";" BLOCK} [";"]] "end" |
	ANW

FUNC =	
	BEZ [ "(" [EXPR {, EXPR}] ")" ]

EXPR = 		
	EXPRADD {"="|"<"|">"|"<="|">="|"<>" EXPRADD}
	
EXPRADD = 	
	EXPRMUL {"+"|"-" EXPRMUL}
	
EXPRMUL = 	
	TERM {"*"|"/"|"mod"|"div" TERM}

TERM =	
	"-" TERM |
	"NOT" TERM |
	CONST |
	VAR |
	FUNC |
	"(" EXPR ")" 
		
CONST =	
	INT |
	HEXINT |
	FLOAT |
	STRING |
	CHAR |
	"True" |
	"False"

VAR	=	
	NAME |
	NAME "[" INT "]"

NAME =	
	LIT {LIT | "0".."9" | "_"}
							   
LIT =	
	"A".."Z", "a".."z"

STRING = 
	"'" {STRINGCHAR} "'"

STRINGCHAR =
	ASCII(0)..ASCII(255) - "'" - ASCII(13) | "''"

CHAR =
	"#" NUM {NUM}

HEXINT =
	"$" NUM {NUM}

HEXNUM = 
	"0".."9"|"A".."F"|"a".."f"

FLOAT = 
	INT"."[["e"]INT]

INT = 
	["-"] NUM {NUM}

NUM = 
	"0".."9"

================================
 SYNTAX OF TFUNC-Declaraions:
================================

DECLARATION =	
	BEZ PARAMLIST [":" TYPE]

PARAMLIST = 
	"(" [PARAM {; PARAM}] ")"

PARAM = 
	["var" | "func"] TYPE ["open"]

TYPE = 
	"float" |	
	"string" |
	"integer" |
	"boolean" |
	"array" |
	"all" |	
	"mult" |
	"add" |
	"void"



