source: osm/applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/level0l/Level0LParser.jj@ 35291

Last change on this file since 35291 was 35291, checked in by simon04, 4 years ago

JOSM/comfort0: Level0LParser.jj <WHITESPACE>

File size: 3.6 KB
Line 
1options {
2 STATIC = false;
3}
4
5PARSER_BEGIN(Level0LParser)
6package net.simon04.comfort0.level0l.parsergen;
7import org.openstreetmap.josm.data.osm.*;
8import org.openstreetmap.josm.data.coor.*;
9import java.util.ArrayList;
10import java.util.List;
11public class Level0LParser {
12}
13PARSER_END(Level0LParser)
14
15<DEFAULT> //HEADER
16TOKEN: {
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>
35SKIP: { < ~["\n", "\r"] > }
36
37<COMMENT>
38TOKEN: {
39 <C_EOL: ("\n" | "\r" | "\r\n") > : DEFAULT
40}
41
42<VALUE>
43TOKEN: {
44 <V_EOL: ("\n" | "\r" | "\r\n") > : DEFAULT
45 | <TEXT: (~["\n", "\r"])+ >
46}
47
48List<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
70NodeData 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
96WayData 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
113RelationData 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
130void way_data(WayData r):
131{}
132{
133 ( LOOKAHEAD(3) way_node(r) | tag(r) )*
134}
135
136void 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
150void relation_data(RelationData r):
151{}
152{
153 ( LOOKAHEAD(3) relation_member(r) | tag(r) )*
154}
155
156void 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
183void 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}
Note: See TracBrowser for help on using the repository browser.