82 lines
1.4 KiB
ANTLR
82 lines
1.4 KiB
ANTLR
grammar QuixosLock;
|
|
|
|
document
|
|
: QUIXOS_LOCK FRAGMENT? VERSION INTEGER LBRACE
|
|
(quixosEntry | importEntry | resourceEntry)* RBRACE EOF
|
|
;
|
|
|
|
quixosEntry
|
|
: QUIXOS SOURCE quixosSourceBlock
|
|
;
|
|
|
|
resourceEntry
|
|
: resourceKind identifier SOURCE sourceBlock
|
|
;
|
|
|
|
importEntry
|
|
: IMPORT stringLiteral SEMI
|
|
;
|
|
|
|
resourceKind
|
|
: INTERFACE
|
|
| PACKAGE
|
|
;
|
|
|
|
sourceBlock
|
|
: LBRACE
|
|
REPOSITORY stringLiteral SEMI
|
|
COMMIT stringLiteral SEMI
|
|
RBRACE
|
|
;
|
|
|
|
quixosSourceBlock
|
|
: LBRACE
|
|
REPOSITORY stringLiteral SEMI
|
|
(POLICY sourcePolicy SEMI REF stringLiteral SEMI)?
|
|
COMMIT stringLiteral SEMI
|
|
RBRACE
|
|
;
|
|
|
|
sourcePolicy
|
|
: PINNED
|
|
| TRACK_RELEASE
|
|
| TRACK_DEVELOPMENT
|
|
;
|
|
|
|
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';
|
|
POLICY: 'policy';
|
|
REF: 'ref';
|
|
PINNED: 'pinned';
|
|
TRACK_RELEASE: 'track-release';
|
|
TRACK_DEVELOPMENT: 'track-development';
|
|
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;
|