-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathMailAddress.rsc
More file actions
53 lines (32 loc) · 1.21 KB
/
MailAddress.rsc
File metadata and controls
53 lines (32 loc) · 1.21 KB
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
@synopsis{This encodes the mail address part of RFC822}
@pitfalls{
This was taken over literally from RFC822 but not tested.
}
module lang::paths::MailAddress
lexical Address
= adressee: Mailbox
| namedList: Group
;
lexical Group = Phrase ":" {Mailbox ","}+ ";";
lexical Mailbox
= simpleAddress: AddrSpec
| nameAndAddrSpec: Phrase RouteAddr
;
lexical RouteAddr = "\<" Route? AddrSpec "\>";
lexical Route = {Domain "@"}+ ":"; // hard to interpret original: 1#("@" domain) ":"
lexical AddrSpec = globalAddress: LocalPart "@" Domain;
lexical LocalPart = uninterpretedCasePreserved: {Word "."}+ ;
lexical Domain = {SubDomain "."}+;
lexical SubDomain = DomainRef | DomainLiteral;
lexical DomainLiteral = "[" (Dtext | QuotedPair)* "]";
lexical Dtext = (![\\\]\[\n\r\ ] + [\ ])+;
lexical DomainRef = Atom;
lexical Phrase = Word+;
lexical Atom = ![] - [()\<\>@,;:|\".\[\]] - [\a00-a20] - [\ ];
lexical Specials = [()\<\>@,;:|\".\[\]];
lexical Controls = [\a00-\a20];
lexical Word = Atom | QuotedString;
lexical QuotedString = "\"" (Qtext | QuotedPair)* "\"";
lexical Qtext = (![\\\"\n\r] + [\ ])+;
lexical QuotedPair = "\\" CHAR;
lexical CHAR = [\a00-\a7F]; // All of ASCII