1 | options {
|
---|
2 | STATIC = false;
|
---|
3 | }
|
---|
4 |
|
---|
5 | PARSER_BEGIN(Level0LParser)
|
---|
6 | package net.simon04.comfort0.level0l.parsergen;
|
---|
7 | import org.openstreetmap.josm.data.osm.*;
|
---|
8 | import org.openstreetmap.josm.data.coor.*;
|
---|
9 | import java.util.ArrayList;
|
---|
10 | import java.util.List;
|
---|
11 | public class Level0LParser {
|
---|
12 | }
|
---|
13 | PARSER_END(Level0LParser)
|
---|
14 |
|
---|
15 | <DEFAULT> //HEADER
|
---|
16 | TOKEN: {
|
---|
17 | <EOL: ("\n" | "\r" | "\r\n") >
|
---|
18 | | <ID: (["0"-"9"])+ >
|
---|
19 | | <NODE: "node" >
|
---|
20 | | <WAY: "way" >
|
---|
21 | | <RELATION: "relation" >
|
---|
22 | | <WY: "wy" >
|
---|
23 | | <ND: "nd" >
|
---|
24 | | <REL: "rel" >
|
---|
25 | | <EQ: "=" > : VALUE
|
---|
26 | | <IDENT: ["a"-"z", "A"-"Z", "_"] (["a"-"z", "A"-"Z", "_", ":", "-", "0"-"9"])* >
|
---|
27 | | <FLOAT: ("+" | "-")? (["0"-"9"])+ ("." (["0"-"9"])+)? >
|
---|
28 | | <COLON: ":" >
|
---|
29 | | <COMMA: "," >
|
---|
30 | | <WHITESPACE: ([" ", "\t"])+ >
|
---|
31 | | <COMMENT_START: "#"> : COMMENT
|
---|
32 | }
|
---|
33 |
|
---|
34 | <COMMENT>
|
---|
35 | SKIP: { < ~["\n", "\r"] > }
|
---|
36 |
|
---|
37 | <COMMENT>
|
---|
38 | TOKEN: {
|
---|
39 | <C_EOL: ("\n" | "\r" | "\r\n") > : DEFAULT
|
---|
40 | }
|
---|
41 |
|
---|
42 | <VALUE>
|
---|
43 | TOKEN: {
|
---|
44 | <V_EOL: ("\n" | "\r" | "\r\n") > : DEFAULT
|
---|
45 | | <TEXT: (~["\n", "\r"])+ >
|
---|
46 | }
|
---|
47 |
|
---|
48 | List<PrimitiveData> primitives():
|
---|
49 | {
|
---|
50 | List<PrimitiveData> primitives = new ArrayList<PrimitiveData>();
|
---|
51 | PrimitiveData p;
|
---|
52 | }
|
---|
53 | {
|
---|
54 | (
|
---|
55 | p = node()
|
---|
56 | { primitives.add(p); }
|
---|
57 | |
|
---|
58 | p = way()
|
---|
59 | { primitives.add(p); }
|
---|
60 | |
|
---|
61 | p = relation()
|
---|
62 | { primitives.add(p); }
|
---|
63 | |
|
---|
64 | <COMMENT_START> <C_EOL> | <EOL>
|
---|
65 | )*
|
---|
66 | <EOF>
|
---|
67 | { return primitives; }
|
---|
68 | }
|
---|
69 |
|
---|
70 | NodeData node():
|
---|
71 | {
|
---|
72 | NodeData r;
|
---|
73 | Token id, lat, lon;
|
---|
74 | }
|
---|
75 | {
|
---|
76 | <NODE>
|
---|
77 | { r = new NodeData(); }
|
---|
78 | ( <WHITESPACE> )+
|
---|
79 | id=<ID>
|
---|
80 | { r.setId(Long.parseLong(id.image)); }
|
---|
81 | ( <WHITESPACE> )*
|
---|
82 | <COLON>
|
---|
83 | ( <WHITESPACE> )*
|
---|
84 | lat=<FLOAT>
|
---|
85 | ( <WHITESPACE> )*
|
---|
86 | <COMMA>
|
---|
87 | ( <WHITESPACE> )*
|
---|
88 | lon=<FLOAT>
|
---|
89 | { r.setCoor(new LatLon(Double.parseDouble(lat.image), Double.parseDouble(lon.image))); }
|
---|
90 | ( <WHITESPACE> )*
|
---|
91 | ( <COMMENT_START> <C_EOL> | <EOL> )
|
---|
92 | ( tag(r) )*
|
---|
93 | { return r; }
|
---|
94 | }
|
---|
95 |
|
---|
96 | WayData way():
|
---|
97 | {
|
---|
98 | WayData r;
|
---|
99 | Token id;
|
---|
100 | }
|
---|
101 | {
|
---|
102 | <WAY>
|
---|
103 | ( <WHITESPACE> )+
|
---|
104 | { r = new WayData(); }
|
---|
105 | id=<ID>
|
---|
106 | { r.setId(Long.parseLong(id.image)); }
|
---|
107 | ( <WHITESPACE> )*
|
---|
108 | ( <COMMENT_START> <C_EOL> | <EOL> )
|
---|
109 | way_data(r)
|
---|
110 | { return r; }
|
---|
111 | }
|
---|
112 |
|
---|
113 | RelationData relation():
|
---|
114 | {
|
---|
115 | RelationData r;
|
---|
116 | Token id;
|
---|
117 | }
|
---|
118 | {
|
---|
119 | <RELATION>
|
---|
120 | ( <WHITESPACE> )+
|
---|
121 | { r = new RelationData(); }
|
---|
122 | id=<ID>
|
---|
123 | { r.setId(Long.parseLong(id.image)); }
|
---|
124 | ( <WHITESPACE> )*
|
---|
125 | ( <COMMENT_START> <C_EOL> | <EOL> )
|
---|
126 | relation_data(r)
|
---|
127 | { return r; }
|
---|
128 | }
|
---|
129 |
|
---|
130 | void way_data(WayData r):
|
---|
131 | {}
|
---|
132 | {
|
---|
133 | ( LOOKAHEAD(3) way_node(r) | tag(r) )*
|
---|
134 | }
|
---|
135 |
|
---|
136 | void way_node(WayData r):
|
---|
137 | {
|
---|
138 | Token id;
|
---|
139 | }
|
---|
140 | {
|
---|
141 | ( <WHITESPACE> )+
|
---|
142 | <ND>
|
---|
143 | ( <WHITESPACE> )+
|
---|
144 | id=<ID>
|
---|
145 | { r.getNodeIds().add(Long.parseLong(id.image)); }
|
---|
146 | ( <WHITESPACE> )*
|
---|
147 | ( <COMMENT_START> <C_EOL> | <EOL> )
|
---|
148 | }
|
---|
149 |
|
---|
150 | void relation_data(RelationData r):
|
---|
151 | {}
|
---|
152 | {
|
---|
153 | ( LOOKAHEAD(3) relation_member(r) | tag(r) )*
|
---|
154 | }
|
---|
155 |
|
---|
156 | void relation_member(RelationData r):
|
---|
157 | {
|
---|
158 | OsmPrimitiveType type;
|
---|
159 | Token id;
|
---|
160 | Token role = null;
|
---|
161 | }
|
---|
162 | {
|
---|
163 | ( <WHITESPACE> )+
|
---|
164 | (
|
---|
165 | <ND> { type = OsmPrimitiveType.NODE; }
|
---|
166 | |
|
---|
167 | <WY> { type = OsmPrimitiveType.WAY; }
|
---|
168 | |
|
---|
169 | <REL> { type = OsmPrimitiveType.RELATION; }
|
---|
170 | )
|
---|
171 | ( <WHITESPACE> )+
|
---|
172 | id=<ID>
|
---|
173 | (
|
---|
174 | LOOKAHEAD(2)
|
---|
175 | ( <WHITESPACE> )+
|
---|
176 | role=<IDENT>
|
---|
177 | )?
|
---|
178 | { r.getMembers().add(new RelationMemberData(role != null ? role.image : "", type, Long.parseLong(id.image))); }
|
---|
179 | ( <WHITESPACE> )*
|
---|
180 | ( <COMMENT_START> <C_EOL> | <EOL> )
|
---|
181 | }
|
---|
182 |
|
---|
183 | void tag(PrimitiveData r):
|
---|
184 | {
|
---|
185 | Token k, v;
|
---|
186 | }
|
---|
187 | {
|
---|
188 | ( <WHITESPACE> )+
|
---|
189 | k=<IDENT>
|
---|
190 | ( <WHITESPACE> )*
|
---|
191 | <EQ>
|
---|
192 | ( <WHITESPACE> )*
|
---|
193 | v=<TEXT>
|
---|
194 | <V_EOL>
|
---|
195 | { r.put(k.image.trim(), v.image.trim()); }
|
---|
196 | }
|
---|