-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathll1_irc_grammar.txt
executable file
·284 lines (251 loc) · 13.9 KB
/
ll1_irc_grammar.txt
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
# LL(1) grammar for an IRC parser
#
# TODO
#
# Start
Message -> TagPrefix SourcePrefix Verb Params CrLf .
# Non-Terminals
AlphaNumeric -> Letter | Digit .
Integer -> Digit Integer .
Letter -> LowerCase | UpperCase .
LowerCase -> LowerCaseHexLetter | LowerCaseLetter .
UpperCase -> UpperCaseHexLetter | UpperCaseLetter .
LowerCaseLetter -> 0x67 | 0x68 | 0x69 | 0x6A | 0x6B | 0x6C | 0x6D | 0x6E | 0x6F | 0x70 | 0x71 | 0x72 | 0x73 | 0x74 | 0x75 | 0x76 | 0x77 | 0x78 | 0x79 | 0x7A .
UpperCaseLetter -> 0x47 | 0x48 | 0x49 | 0x4A | 0x4B | 0x4C | 0x4D | 0x4E | 0x4F | 0x50 | 0x51 | 0x52 | 0x53 | 0x54 | 0x55 | 0x56 | 0x57 | 0x58 | 0x59 | 0x5A .
LowerCaseHexLetter -> 0x61 | 0x62 | 0x63 | 0x64 | 0x65 | 0x66 .
UpperCaseHexLetter -> 0x41 | 0x42 | 0x43 | 0x44 | 0x45 | 0x46 .
Digit -> 0x30 | 0x31 | 0x32 | 0x33 | 0x34 | 0x35 | 0x36 | 0x37 | 0x38 | 0x39 .
UpperCaseOrDigit -> UpperCase | Digit .
NonPrintableWithoutNullLfCrBellFormatCTCP -> 0x05 | 0x06 | 0x08 | 0x09 | 0x0B | 0x0C | 0x0E | 0x10 | 0x12 | 0x13 | 0x14 | 0x15 | 0x16 | 0x17 | 0x18 | 0x19 | 0x1A | 0x1B | 0x1C | 0x7F .
UndefinedPunctuationMark -> 0x27 | 0x28 | 0x29 | 0x3C | 0x3E | 0x3F .
Special -> 0x5B | 0x5C | 0x5D | 0x5E | 0x5F | 0x60 | 0x7B | 0x7C | 0x7D .
CrLf -> 0x0D 0x0A | 0x0A .
Spaces -> 0x20 Spaces .
ShortName -> ShortNamePrefix ShortNameSuffix .
ShortNamePrefix -> AlphaNumeric .
ShortNameSuffix -> ShortNameList | .
ShortNameList -> AlphaNumeric ShortNameList | 0x2D ShortNameList .
ColorFormat -> 0x03 ColorCombination .
ColorCombination -> ForegroundColor ColorCombinationSuffix | .
ColorCombinationSuffix -> 0x2C BackgroundColor | .
ColorNumber -> Digit ColorSuffix .
ForegroundColor -> ColorNumber .
BackgroundColor -> ColorNumber .
ColorSuffix -> Digit | .
HexDigit -> LowerCaseHexLetter | UpperCaseHexLetter | Digit .
HexDecimal -> HexDigit HexDigit .
HexColorFormat -> 0x04 HexColorCombination .
HexColorCombination -> ForegroundHexColor HexColorCombinationSuffix | .
HexColorCombinationSuffix -> 0x2C BackgroundHexColor | .
HexColorTriplet -> HexDecimal HexDecimal HexDecimal .
ForegroundHexColor -> HexColorTriplet .
BackgroundHexColor -> HexColorTriplet .
Host -> ShortName HostSuffix .
HostSuffix -> 0x2E ShortName HostSuffix | 0x3A ShortName HostSuffix | .
ServerName -> Host .
Timestamp -> Integer .
# Formatting
BoldFormat -> 0x02 .
ResetFormat -> 0x0F .
MonospaceFormat -> 0x11 .
ItalicsFormat -> 0x1D .
StrikethroughFormat -> 0x1E .
UnderlineFormat -> 0x1F .
Format -> BoldFormat | ItalicsFormat | UnderlineFormat | StrikethroughFormat | MonospaceFormat | ResetFormat | ColorFormat | HexColorFormat .
# Tag escaping. A single backslash should be ignored (NOT added into grammar)
TagValueEscape -> 0x5C TagValueEscapeSuffix .
TagValueEscapeSuffix -> TagValueEscapeBackslash | TagValueEscapeSemicolon | TagValueEscapeSpace | TagValueEscapeCr | TagValueEscapeLf .
TagValueEscapeBackslash -> 0x5C .
TagValueEscapeSemicolon -> 0x3A .
TagValueEscapeSpace -> 0x53 | 0x73 .
TagValueEscapeCr -> 0x52 | 0x72 .
TagValueEscapeLf -> 0x4E | 0x6E .
# Base terminal collection
UTF8WithoutAlphaNumericFormatCTCPNullCrLFBase -> NonPrintableWithoutNullLfCrBellFormatCTCP | UndefinedPunctuationMark | 0x21 | 0x25 | 0x2B | 0x2D | 0x2E | 0x2F | 0x3D | 0x7E | 0x2A | 0x23 | 0x26 | 0x24 | 0x80-0xFF .
# Params terminal collection (without alphanumeric or CTCP)
UTF8WithoutAlphaNumericFormatCTCPNullCrLfSpaceCommaColon -> UTF8WithoutAlphaNumericFormatCTCPNullCrLFBase | 0x07 | 0x3B | 0x40 | Special | 0x22 .
# Tags terminal collection
UTF8WithoutNullCrLFBase -> UTF8WithoutAlphaNumericFormatCTCPNullCrLFBase | AlphaNumeric | 0x01 | 0x02 | 0x03 | 0x04 | 0x0F | 0x11 | 0x1D | 0x1E | 0x1F | 0x22 .
UTF8WithoutNullCrLfSemiColonSpace -> UTF8WithoutNullCrLFBase | 0x07 | 0x2C | 0x3A | 0x40 | 0x5B | 0x5D | 0x5E | 0x5F | 0x60 | 0x7B | 0x7C | 0x7D .
# Username terminal collection
UTF8WithoutNullCrLfSpaceAt -> UTF8WithoutNullCrLFBase | 0x07 | 0x2C | 0x3A | 0x3B | Special .
# Channel terminal collection
UTF8WithoutNullBellCrLfSpaceCommaAndColon -> UTF8WithoutNullCrLFBase | 0x3B | 0x40 | Special .
# Comma seperated middle list (key)
UTF8WithoutNullCrLfCommaSpaceListTerminal -> UTF8WithoutNullCrLFBase | 0x07 | 0x3A | 0x3B | 0x40 | Special .
# Params base terminal collection
MiddlePrefixListFormatBaseTerminals -> UTF8WithoutAlphaNumericFormatCTCPNullCrLfSpaceCommaColon MiddlePrefixListFormatBaseTerminals | LowerCaseLetter MiddlePrefixListFormatBaseTerminals | UpperCaseLetter MiddlePrefixListFormatBaseTerminals .
MiddlePrefixListFormatBase -> Format MiddlePrefixListFormatBase | MiddlePrefixListFormatBaseTerminals MiddlePrefixListFormatBase .
MiddlePrefixListTerminals -> Digit MiddlePrefixListTerminals | UpperCaseHexLetter MiddlePrefixListTerminals | LowerCaseHexLetter MiddlePrefixListTerminals | 0x2C MiddlePrefixListTerminals .
MiddlePrefixList -> MiddlePrefixListFormatBase MiddlePrefixList | MiddlePrefixListTerminals MiddlePrefixList .
MiddlePrefixWithColonList -> MiddlePrefixList MiddlePrefixWithColonList | 0x3A MiddlePrefixWithColonList | 0x01 MiddlePrefixWithColonList .
# Params base
MiddleSuffix -> MiddlePrefixWithColonList | .
Middle -> MiddlePrefixList MiddleSuffix .
Trailing -> 0x3A TrailingPrefix .
TrailingPrefix -> TrailingList | CTCPMessage | .
TrailingList -> TrailingListPrefix TrailingListSuffix .
TrailingListPrefix -> MiddlePrefixList TrailingListPrefix | 0x20 TrailingListPrefix | 0x3A TrailingListPrefix .
TrailingListSuffix -> MiddlePrefixWithColonList TrailingList | 0x20 TrailingList | .
# Verb handling
Verb -> CommandName | CommandCode | .
CommandName -> Letter CommandName .
CommandCode -> Digit Digit Digit .
# Parameter handling
Params -> ParamsPrefix | .
ParamsPrefix -> Spaces ParamsSuffix .
ParamsSuffix -> Middle ParamsPrefix | Trailing | CTCPMessage .
# IRCv3 Tags
TagPrefix -> 0x40 Tags Spaces | .
Tags -> Tag TagsSuffix .
TagsSuffix -> TagsList | .
TagsList -> 0x3B Tag TagsList .
Tag -> TagKey TagSuffix .
TagSuffix -> 0x3D TagValue | .
TagKey -> 0x2B Host TagKeySuffix | Host TagKeySuffix .
TagKeySuffix -> 0x2F ShortName | .
TagValue -> TagValueList | .
TagValueList -> UTF8WithoutNullCrLfSemiColonSpace TagValueList | TagValueEscapeList TagValueList .
TagValueEscapeList -> TagValueEscape TagValueEscapeList .
# Source prefix (Terminals are taken from ServerName & Nickname)
SourcePrefix -> 0x3A SourcePrefixTarget Spaces | .
SourcePrefixTargetTerminals -> SourcePrefixTargetPrefixPrefix | 0x2D | 0x2E .
SourcePrefixTarget -> SourcePrefixTargetPrefix SourcePrefixTargetSuffix .
SourcePrefixTargetPrefix -> SourcePrefixTargetPrefixPrefix SourcePrefixTargetPrefixSuffix .
SourcePrefixTargetPrefixPrefix -> AlphaNumeric | Special .
SourcePrefixTargetPrefixSuffix -> SourcePrefixTargetPrefixTargetList | .
SourcePrefixTargetPrefixTargetList -> SourcePrefixTargetTerminals SourcePrefixTargetPrefixTargetList .
SourcePrefixTargetSuffix -> SourcePrefixUsername SourcePrefixHostname .
SourcePrefixUsername -> UserHostUsername | .
SourcePrefixHostname -> UserHostHostname | .
# Nickname
Nickname -> Letter NicknameSuffix | Special NicknameSuffix .
NicknameSuffix -> Special NicknameSuffix | AlphaNumeric NicknameSuffix | 0x2D NicknameSuffix | .
# Username
Username -> UTF8WithoutNullCrLfSpaceAt Username .
# Channel
Channel -> ChannelPrefix ChannelString ChannelSuffix .
ChannelPrefixWithoutMembership -> 0x23 | 0x21 ChannelId .
ChannelPrefix -> ChannelPrefixWithoutMembership | 0x26 | 0x2B .
ChannelId -> UpperCaseOrDigit UpperCaseOrDigit UpperCaseOrDigit UpperCaseOrDigit UpperCaseOrDigit .
ChannelSuffix -> 0x3A ChannelString | .
ChannelString -> UTF8WithoutNullBellCrLfSpaceCommaAndColon ChannelString .
# User Host
UserHost -> Nickname UserHostUsername UserHostHostname .
UserHostUsername -> 0x21 Username .
UserHostHostname -> 0x40 Host .
# Mode string
ModeStringList -> ModeString ModeStringList .
ModeString -> PlusMinus ModeChars .
ModeChars -> ModeCharsList | .
ModeCharsList -> Mode ModeCharsList .
Mode -> Letter .
PlusMinus -> 0x2B | 0x2D .
# Channel join (trailing) key list
KeyList -> KeyListItem KeyListSuffix .
KeyListSuffix -> KeyListItems | .
KeyListItems -> 0x2C KeyItem KeyListItems .
KeyListItem -> Key | .
Key -> UTF8WithoutNullCrLfCommaSpaceListTerminal Key .
# Target lists
NicknameSpaceList -> Nickname NicknameSpaceListSuffix .
NicknameSpaceListSuffix -> NicknameSpaceListItems | .
NicknameSpaceListItems -> 0x20 Nickname NicknameSpaceListItems .
ChannelCommaList -> Channel ChannelCommaListSuffix .
ChannelCommaListSuffix -> ChannelCommaListItems | .
ChannelCommaListItems -> 0x2C Channel ChannelCommaListItems .
# Elistcond
ElistCond -> UTF8WithoutNullCrLfCommaSpaceListTerminal ElistCond .
ElistCondList -> ElistCond ElistCondListSuffix .
ElistCondListSuffix -> ElistCondListItems | .
ElistCondListItems -> 0x2C ElistCond ElistCondListItems .
# Space delimited channel membership list
ChannelMembershipSpaceList -> MsgToChannel ChannelMembershipSpaceListItems .
ChannelMembershipSpaceListSuffix -> ChannelMembershipSpaceListItems | .
ChannelMembershipSpaceListItems -> 0x20 MsgToChannel ChannelMembershipSpaceListItems .
# Message target (PRIVMSG and NOTICE)
MsgTarget -> MsgTo MsgTargetItems .
MsgTargetSuffix -> MsgTargetItems | .
MsgTargetItems -> 0x2C MsgTo MsgTargetItems .
MsgTo -> MsgToNickname | MsgToChannel | MsgToTargetMask .
MsgToTargetMask -> 0x24 MsgToTargetMaskLetters .
MsgToTargetMaskLetters -> UTF8WithoutNullCrLfCommaSpaceListTerminal MsgToTargetMaskLetters .
# This allows only a subset of usernames (!)
MsgToNickname -> Nickname MsgToNicknameSuffix .
MsgToNicknameSuffix -> MsgToUserHost MsgToUserHostServer | UserHostUsername UserHostHostname .
MsgToUserHost -> 0x25 Host | .
MsgToUserHostServer -> 0x40 ServerName | .
MsgToChannel -> MsgToChannelPrefix ChannelString ChannelSuffix .
MsgToChannelPrefix -> MsgToChannelChannelPrefixMembership | ChannelMembershipPrefixWithoutChannelPrefix MsgToChannelPrefixChannelPrefixSuffix | ChannelPrefixWithoutMembership .
MsgToChannelPrefixChannelPrefixSuffix -> MsgToChannelChannelPrefixMembership | ChannelPrefixWithoutMembership .
# For &channel & &&channel ('&' or '+' in '&channel' or '+channel')
MsgToChannelChannelPrefixMembership -> 0x26 MsgToChannelPrefix | 0x2B MsgToChannelPrefix .
ChannelMembershipPrefixWithoutChannelPrefix -> 0x7E | 0x40 | 0x25 .
ChannelMembershipPrefix -> ChannelMembershipPrefixWithoutChannelPrefix ChannelMembershipPrefix | 0x26 ChannelMembershipPrefix | 0x2B ChannelMembershipPrefix .
# RPL_ISUPPORT (005 or 105)
ISupport -> ISupportToken ISupportSuffix .
ISupportSuffix -> ISupportList | .
ISupportList -> 0x20 ISupportToken ISupportList .
ISupportToken -> ISupportTokenNegated ISupportParameter ISupportTokenSuffix .
ISupportTokenNegated -> 0x2D | .
ISupportTokenSuffix -> 0x3D ISupportValue ISupportValueSuffix | .
ISupportParameter -> UpperCaseOrDigit ISupportParameter .
ISupportValue -> ISupportValueItem ISupportValueItemSuffix | .
ISupportValueSuffix -> ISupportValueList | .
ISupportValueItemSuffix -> 0x3A ISupportValueItemSuffixValue | .
ISupportValueItemSuffixValue -> Integer | .
ISupportValueList -> 0x2C ISupportValue ISupportValueList .
ISupportValueItem -> ISupportValueItemTerminals ISupportValueItem | ISupportValueItemEscape ISupportValueItem .
ISupportValueItemTerminals -> AlphaNumeric | 0x21 | 0x22 | 0x23 | 0x24 | 0x25 | 0x26 | 0x27 | 0x28 | 0x29 | 0x2A | 0x2B | 0x2D | 0x2E | 0x2F | 0x3B | 0x3C | 0x3D | 0x3E | 0x3F | 0x40 | 0x7B | 0x7C | 0x7D | 0x7E .
# ISUPPORT escaping
ISupportValueItemEscape -> 0x5C 0x78 ISupportValueEscapeSuffix .
ISupportValueItemEscapeSuffix -> ISupportValueEscapeBackslash | ISupportValueEscapeSpace | ISupportValueEscapeEqual .
ISupportValueItemEscapeBackslash -> 0x35 0x43 .
ISupportValueItemEscapeSpace -> 0x32 0x30 .
ISupportValueItemEscapeEqual -> 0x33 0x44 .
# CAP LS
CapList -> CapListItem CapListSuffix | .
CapListSuffix -> CapListItems | .
CapListItems -> 0x20 CapListItem CapListItems .
CapListItem -> CapListItemKey CapListItemSuffix .
CapListItemSuffix -> 0x3D CapListItemValueList | .
CapListItemKey -> Host CapListItemKeySuffix .
CapListItemKeySuffix -> 0x2F ShortName | .
CapListItemValueList -> CapListItemValueListItem CapListItemValueListSuffix .
CapListItemValueListSuffix -> CapListItemValueListItems | .
CapListItemValueListItems -> 0x2C CapListItemValueListItem CapListItemValueListItems .
CapListItemValueListItem -> ShortName .
# RPL_NAMREPLY (353)
NameReply -> NameReplyChannelType Spaces Channel Spaces 0x3A NicknameMembershipSpaceList .
NameReplyChannelType -> 0x3D | 0x40 | 0x2A .
NicknameMembershipSpaceList -> NicknameMembership NicknameMembershipSpaceListSuffix .
NicknameMembershipSpaceListSuffix -> NicknameMembershipSpaceListItems | .
NicknameMembershipSpaceListItems -> 0x20 NicknameMembership NicknameMembershipSpaceListItems .
NicknameMembership -> NicknameChannelMembership Nickname SourcePrefixTargetSuffix .
NicknameChannelMembership -> ChannelMembershipPrefix | .
# RPL_USERHOST (302)
UserHostList -> UserHostListItem UserHostListSuffix .
UserHostListSuffix -> UserHostListList | .
UserHostListItems -> 0x20 UserHostListItem UserHostListItems .
UserHostListItem -> Nickname UserHostListOp 0x3D UserHostListAway UserHostListHostname .
UserHostListOp -> 0x2A | .
UserHostListAway -> 0x2B | 0x2D .
UserHostListHostname -> UserHostListHostnamePrefix UserHostListHostnameSuffix .
#Can be a username or a hostname
UserHostListHostnamePrefix -> UTF8WithoutNullCrLfSpaceAt UserHostListHostnamePrefix .
UserHostListHostnameSuffix -> 0x40 Host | .
# RPL_WHOREPLY (352)
WhoReply -> WhoReplyPrefix Spaces Username Spaces Host Spaces ServerName Spaces Nickname Spaces WhoReplyFlags Spaces Trailing .
WhoReplyPrefix -> Channel | 0x2A .
WhoReplyFlags -> WhoReplyAway WhoReplyFlagsOp WhoReplyChannelMembership ModeChars .
WhoReplyAway -> 0x47 | 0x48 .
WhoReplyFlagsOp -> 0x2A | .
WhoReplyChannelMembership -> ChannelMembershipPrefix | .
# CTCP
CTCPMessage -> 0x01 CTCPCommand CTCPParams CTCPMessageSuffix .
CTCPCommand -> CTCPMiddle .
CTCPMiddle -> MiddlePrefixList CTCPMiddle | 0x3A CTCPMiddle .
CTCPParams -> 0x20 CTCPParamsSuffix | .
CTCPParamsSuffix -> CTCPParamsMiddle | .
CTCPParamsMiddle -> CTCPMiddle CTCPParamsMiddle | 0x20 CTCPParamsMiddle .
CTCPMessageSuffix -> 0x01 | .