forked from antlr/grammars-v4
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapt.g4
67 lines (53 loc) · 2.44 KB
/
apt.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// Generated with UniGrammar (https://gitlab.com/KOLANICH/UniGrammar.py)
// for antlr4 (https://github.com/antlr/antlr4) backend
grammar apt;
// productions
record: commented=commenterR? rType=TypeR WSS options=optionsR? uri=uriR WSS distribution=wordWithDash components=componentsR WSS?;
wordWithDashSegment: Word | Dash;
wordWithDash: wordWithDashSegment+;
component: WSS cId=wordWithDash;
componentsR: component+;
optionsR: openingBrace=OptionsStart pairs=optionsList closingBrace=OptionsEnd WSS;
optionsList: firstOption=optionR restOptions=additionalOptions;
additionalOptions: additionalOption*;
additionalOption: separator=OptionsSeparator option=optionR;
optionR: key=OptionName OptionNameValueSeparator value=optionValue;
wordWithPlus: Plus word=Word;
uriSchema: word=Word restWords=restSchemaWords;
restSchemaWords: wordWithPlus*;
genericURI: schema=uriSchema Colon restOfURI=nonSpaceString;
uriR: cdromURI | genericURI;
commenterR: CommentMarker WSS;
optionValueSegment: Word | PunctuationAllowedInOptionValue | Dash | OptionName | CdromSchema | TypeR | Plus | Colon;
optionValue: optionValueSegment+;
nonSquareBracketStringSegment: NonWhitespaceNonOptionValueNonSquareRightBracketNonEq | optionValueSegment | OptionNameValueSeparator;
nonSquareBracketString: nonSquareBracketStringSegment+;
nonSpaceStringSegment: nonSquareBracketStringSegment | OptionsEnd;
nonSpaceString: nonSpaceStringSegment+;
singleTickEnclosedString: SingleTick nonSquareBracketString SingleTick;
doubleTickEnclosedString: DoubleTick nonSquareBracketString DoubleTick;
tickEnclosedString: singleTickEnclosedString | doubleTickEnclosedString;
enclosedString: OptionsStart tickEnclosedString OptionsEnd;
cdromURI: CdromSchema Colon enclosedString nonSpaceString;
// keywords
TypeR: 'deb' | 'deb-src';
OptionName: 'arch' | 'lang' | 'target' | 'pdiffs' | 'by-hash' | 'valid-until-max' | 'allow-downgrade-to-insecure' | 'allow-weak' | 'allow-insecure' | 'trusted' | 'signed-by' | 'check-valid-until' | 'valid-until-min' | 'check-date' | 'inrelease-path' | 'date-max-future';
CdromSchema: 'cdrom:';
// tokens
Word: WordChar+;
WSS: WS+;
// characters
WS: [ \t\n\r\u{000b}\u{000c}];
PunctuationAllowedInOptionValue: [/.];
OptionsStart: '[';
OptionsEnd: ']';
OptionNameValueSeparator: '=';
CommentMarker: '#';
Plus: '+';
Colon: ':';
OptionsSeparator: ',';
Dash: '-';
SingleTick: '\'';
DoubleTick: '"';
WordChar: [0-9A-Z_a-z];
NonWhitespaceNonOptionValueNonSquareRightBracketNonEq: ~[\t-\r "#'+-:=A-\]_a-z];