Grammar of primitives common between specs. Partial grammars for network status and...
[torspec-validations.git] / lib / torspec / primitives.treetop
blob13228199db2c287c665ec0fefae057bd51ef556e
1 module Torspec
2   grammar Primitives
3     rule Year
4       [0-9] [0-9] [0-9] [0-9]
5     end
7     rule Month
8       [0] [1-9] / [1] [0-2]
9     end
11     rule Day
12       [0-2] [0-9] / [3] [0-1]
13     end
15     rule Hour
16       [0] [0-9] / [1] [0-9] / [2] [0-4]
17     end
19     rule Minute
20       [0] [0-9] / [1-5] [0-9]
21     end
23     rule Second
24       [0] [0-9] / [1-5] [0-9]
25     end
27     rule DateTime
28       Year "-" Month "-" Day " " Hour ":" Minute ":" Second
29     end
31     rule Base64Char
32       [A-Za-z0-9+/]
33     end
35     rule Base64Hash
36       Base64Char+
37     end
39     rule IPv4Byte
40       [2] [5] [0-5] / [2] [0-4] [0-9] / [1] [0-9] [0-9] / [1-9] [0-9] / [0-9]
41     end
43     rule IPv4Address
44       IPv4Byte "." IPv4Byte "." IPv4Byte "." IPv4Byte
45     end
47     rule IP
48       IPv4Address
49     end
51     rule Hostname
52       [a-zA-Z\.\-]+ # TODO: Wow this is a garbage production....
53     end
55     rule Address
56       Hostname / IP
57     end
59     rule Port
60       [0-9]+
61     end
63     rule ORPort
64       Port
65     end
67     rule SocksPOrt
68       [0]
69     end
71     rule DirPort
72       Port
73     end
75     rule SP
76       " "
77     end
79     rule NL
80       "\r\n"
81     end
83     rule ALPHA
84       [A-Z] / [a-z]
85     end
87     rule DIGIT
88       [0-9]
89     end
91     rule HEXDIG
92       DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
93     end
95     rule Boolean
96       [0] / [1]
97     end
98   
99     rule IDChar
100       ALPHA / DIGIT
101     end
103     rule NicknameChar
104       [A-Z] / [a-z] / [0-9]
105     end
107     rule Nickname
108       NicknameChar 1..19
109     end
111     rule Fingerprint
112       "$" HEXDIG 40..40 / HEXDIG 40..40
113     end
115     rule ServerID
116       Nickname / Fingerprint
117     end
119     rule LongName
120       f:Fingerprint "=" n:Nickname / Fingerprint
121     end
123     rule ServerSpec
124       LongName / Nickname
125     end
127     rule StreamID
128       IDChar 1..16
129     end
131     rule CircuitID
132       IDChar 1..16
133     end
134   end