//--------------------------------------------------------------
// 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";

Generated by v4.2 from CWscript2HTML.cwp.