//--------------------------------------------------------------
// Extended-BNF script for scanning a tiny modeling
// language.
//
// Called by "tinyDSL2HTML.cwp".
//
// Type:
//    CodeWorker -parseBNF tinyDSL_scanning.cwp
//                         <your_specification.txt>
// to check whether a specification conforms to the syntax of
// the DSL or not.
//
// Example:
//    CodeWorker -parseBNF tinyDSL_scanning.cwp tinyDSL_spec.txt
//--------------------------------------------------------------

tinyDSL	::= #continue #ignore(C++) [class_definition]* #empty;

class_definition	::=
		CLASS #readIdentifier:sClassName
		[':' #continue #readIdentifier:sSuperClass]?
		'{'
		[attribute_definition]*
		'}'
		;

attribute_definition	::=
		#readIdentifier:sAttributeName
		#continue
		':'
		[AGGREGATE]?
		type_specifier
		';'
		;

type_specifier	::=
		simple_type
		['[' #continue ']']?
		;

simple_type	::= DOUBLE | STRING | #readIdentifier;


//----------------------------------------------------
//                    Lexical tokens
//----------------------------------------------------

CLASS	::= #readIdentifier:"class";
AGGREGATE	::= #readIdentifier:"aggregate";
DOUBLE	::= #readIdentifier:"double";
STRING	::= #readIdentifier:"string";
