Map:
    Association+[COMMA]
    ;

Association:
    NodeId SEMICOLON NOT? TypeName ;

NodeId:
    IDENTIFIER ;

TypeName:
    IDENTIFIER ;

// Productions for comments
Layout: LayoutItem*;
LayoutItem: WS | Comment;
Comment: '/*' Corncs '*/' | CommentLine;
Corncs: Cornc*;
Cornc: Comment | NotComment | WS;

terminals

// Terminals for comments
WS: /\s+/;
CommentLine: /\/\/.*/;
NotComment: /((\*[^\/])|[^\s*\/]|\/[^\*])+/;
START_COMMENT: '/*';
END_COMMENT: '*/';

IDENTIFIER:
    /\w+/ ;

AT:
    "@" ;

COMMA:
    "," ;

SEMICOLON:
    ":" ;

OPENBRACKET:
    "[" ;

CLOSEBRACKET:
    "]" ;

NOT:
    "!" ;
