grammar QuixosLock; document : QUIXOS_LOCK FRAGMENT? VERSION INTEGER LBRACE (quixosEntry | importEntry | resourceEntry)* RBRACE EOF ; quixosEntry : QUIXOS SOURCE sourceBlock ; resourceEntry : resourceKind identifier SOURCE sourceBlock ; importEntry : IMPORT stringLiteral SEMI ; resourceKind : INTERFACE | PACKAGE ; sourceBlock : LBRACE REPOSITORY stringLiteral SEMI COMMIT stringLiteral SEMI RBRACE ; identifier : IDENTIFIER ; stringLiteral : STRING_LITERAL ; QUIXOS_LOCK: 'quixos-lock'; FRAGMENT: 'fragment'; VERSION: 'version'; QUIXOS: 'quixos'; SOURCE: 'source'; INTERFACE: 'interface'; PACKAGE: 'package'; REPOSITORY: 'repository'; COMMIT: 'commit'; IMPORT: 'import'; LBRACE: '{'; RBRACE: '}'; SEMI: ';'; INTEGER: [0-9]+; IDENTIFIER: [A-Za-z_] [A-Za-z0-9_]*; STRING_LITERAL: '"' (ESC | ~["\\\r\n])* '"'; fragment ESC: '\\' (["\\/bfnrt] | 'u' HEX HEX HEX HEX); fragment HEX: [0-9a-fA-F]; LINE_COMMENT: '//' ~[\r\n]* -> skip; BLOCK_COMMENT: '/*' .*? '*/' -> skip; WS: [ \t\r\n]+ -> skip;