aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/semanticweb/karma2/model/cqparser
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/semanticweb/karma2/model/cqparser')
-rw-r--r--src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g140
-rw-r--r--src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.tokens36
-rw-r--r--src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryLexer.java814
-rw-r--r--src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryParser.java1611
-rw-r--r--src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryWalker.java179
5 files changed, 2780 insertions, 0 deletions
diff --git a/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g
new file mode 100644
index 0000000..621b0ce
--- /dev/null
+++ b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g
@@ -0,0 +1,140 @@
1grammar ConjunctiveQuery;
2
3options {
4 language = Java;
5 output = AST;
6}
7
8tokens {
9 VARIABLE;
10 CONSTANT;
11 SCONSTANT;
12 ATOM;
13 HEADATOM;
14 PREDICATE;
15 ATOM_LIST;
16 TERM_LIST;
17 RULE;
18 EXPRESSION;
19 PREFIX_LIST;
20 ID;
21 PREFIX;
22 PREDICATE;
23}
24
25@header {
26package org.semanticweb.karma2.model.cqparser;
27
28import java.io.File;
29import java.io.FileInputStream;
30import java.io.InputStream;
31import java.io.FileNotFoundException;
32import java.io.IOException;
33import java.util.Set;
34
35import org.semanticweb.karma2.model.ConjunctiveQuery;
36
37
38import org.semanticweb.karma2.model.cqparser.ConjunctiveQueryWalker;
39import org.semanticweb.karma2.exception.IllegalInputQueryException;
40
41
42
43}
44
45@members{
46
47
48
49 public ConjunctiveQueryParser(String string)
50 throws FileNotFoundException, IOException {
51 this(new CommonTokenStream(new ConjunctiveQueryLexer(new ANTLRStringStream(string))));
52 }
53
54 public ConjunctiveQueryParser(InputStream istream) throws FileNotFoundException, IOException {
55 this(new CommonTokenStream(new ConjunctiveQueryLexer(new ANTLRInputStream(istream))));
56
57 }
58
59
60 public ConjunctiveQueryParser(File file) throws FileNotFoundException, IOException {
61 this(new CommonTokenStream(new ConjunctiveQueryLexer(new ANTLRInputStream(new FileInputStream(file)))));
62
63 }
64
65 public ConjunctiveQuery parse() throws IllegalInputQueryException {
66 cq_return r = null;
67 try {
68 r = cq();
69 } catch (RecognitionException e) {
70 e.printStackTrace();
71 }
72 CommonTree t = (CommonTree) r.getTree();
73
74 //System.out.println(t.toStringTree());
75 CommonTreeNodeStream nodes = new CommonTreeNodeStream(t);
76 // AST nodes have payloads that point into token stream
77 nodes.setTokenStream(input);
78
79
80 ConjunctiveQueryWalker walker = new ConjunctiveQueryWalker();
81
82 ConjunctiveQuery cq = walker.walkExpressionNode(t);
83 return cq;
84 }
85
86 public ConjunctiveQuery parseCQ() throws IllegalInputQueryException {
87 return parse();
88 }
89
90}
91
92
93@lexer::header{
94package org.semanticweb.karma2.model.cqparser;
95}
96
97cq :
98 prefixlist rulebody -> ^(EXPRESSION prefixlist rulebody );
99
100prefixlist:
101 prefix (',' prefix)* -> ^(PREFIX_LIST prefix*);
102
103prefix:
104 'prefix' id ':' '<' url '>' -> ^(PREFIX id url);
105
106
107rulebody:
108 headatom ('<-'|':') body '.'? -> ^(RULE headatom body);
109
110body:
111 atom (',' atom)* -> ^(ATOM_LIST atom*);
112
113
114headatom:
115 id '(' term (',' term)* ')' -> ^(HEADATOM term*);
116
117atom:
118 compositeid '(' term (',' term)* ')' -> ^(ATOM compositeid term*);
119
120compositeid:
121 (id) ':' (id) -> ^(ID id id);
122
123
124term:
125 variable -> ^(VARIABLE variable)
126 | simpleid -> ^(SCONSTANT simpleid)
127 | compositeid -> ^(CONSTANT compositeid);
128
129id : (STRING);
130simpleid : '<' URLSTRING '>' | '<' STRING '>';
131
132// TODO: FIXIT X1 can be parsed as variable
133variable:
134 ('?') id -> ^(id);
135
136 url : (URLSTRING);
137
138URLSTRING : ('http://'|'file:/') ('a'..'z'|'A'..'Z'|'0'..'9'|'/'|'#'|'.'|'-'|'~'|'_')+;
139STRING : ('a'..'z'|'A'..'Z'|'0'..'9'|'/'|'#'|'.'|'-'|'_')+;
140WS : (' '|'\n'|'\r')+ {$channel=HIDDEN;} ;
diff --git a/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.tokens b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.tokens
new file mode 100644
index 0000000..3b4fa39
--- /dev/null
+++ b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.tokens
@@ -0,0 +1,36 @@
1T__20=20
2T__21=21
3T__22=22
4T__23=23
5T__24=24
6T__25=25
7T__26=26
8T__27=27
9T__28=28
10T__29=29
11ATOM=4
12ATOM_LIST=5
13CONSTANT=6
14EXPRESSION=7
15HEADATOM=8
16ID=9
17PREDICATE=10
18PREFIX=11
19PREFIX_LIST=12
20RULE=13
21SCONSTANT=14
22STRING=15
23TERM_LIST=16
24URLSTRING=17
25VARIABLE=18
26WS=19
27'('=20
28')'=21
29','=22
30'.'=23
31':'=24
32'<'=25
33'<-'=26
34'>'=27
35'?'=28
36'prefix'=29
diff --git a/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryLexer.java b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryLexer.java
new file mode 100644
index 0000000..a97d7a4
--- /dev/null
+++ b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryLexer.java
@@ -0,0 +1,814 @@
1// $ANTLR 3.5 /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g 2013-12-13 14:41:34
2
3package org.semanticweb.karma2.model.cqparser;
4
5
6import org.antlr.runtime.*;
7import java.util.Stack;
8import java.util.List;
9import java.util.ArrayList;
10
11@SuppressWarnings("all")
12public class ConjunctiveQueryLexer extends Lexer {
13 public static final int EOF=-1;
14 public static final int T__20=20;
15 public static final int T__21=21;
16 public static final int T__22=22;
17 public static final int T__23=23;
18 public static final int T__24=24;
19 public static final int T__25=25;
20 public static final int T__26=26;
21 public static final int T__27=27;
22 public static final int T__28=28;
23 public static final int T__29=29;
24 public static final int ATOM=4;
25 public static final int ATOM_LIST=5;
26 public static final int CONSTANT=6;
27 public static final int EXPRESSION=7;
28 public static final int HEADATOM=8;
29 public static final int ID=9;
30 public static final int PREDICATE=10;
31 public static final int PREFIX=11;
32 public static final int PREFIX_LIST=12;
33 public static final int RULE=13;
34 public static final int SCONSTANT=14;
35 public static final int STRING=15;
36 public static final int TERM_LIST=16;
37 public static final int URLSTRING=17;
38 public static final int VARIABLE=18;
39 public static final int WS=19;
40
41 // delegates
42 // delegators
43 public Lexer[] getDelegates() {
44 return new Lexer[] {};
45 }
46
47 public ConjunctiveQueryLexer() {}
48 public ConjunctiveQueryLexer(CharStream input) {
49 this(input, new RecognizerSharedState());
50 }
51 public ConjunctiveQueryLexer(CharStream input, RecognizerSharedState state) {
52 super(input,state);
53 }
54 @Override public String getGrammarFileName() { return "/home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g"; }
55
56 // $ANTLR start "T__20"
57 public final void mT__20() throws RecognitionException {
58 try {
59 int _type = T__20;
60 int _channel = DEFAULT_TOKEN_CHANNEL;
61 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:11:7: ( '(' )
62 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:11:9: '('
63 {
64 match('(');
65 }
66
67 state.type = _type;
68 state.channel = _channel;
69 }
70 finally {
71 // do for sure before leaving
72 }
73 }
74 // $ANTLR end "T__20"
75
76 // $ANTLR start "T__21"
77 public final void mT__21() throws RecognitionException {
78 try {
79 int _type = T__21;
80 int _channel = DEFAULT_TOKEN_CHANNEL;
81 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:12:7: ( ')' )
82 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:12:9: ')'
83 {
84 match(')');
85 }
86
87 state.type = _type;
88 state.channel = _channel;
89 }
90 finally {
91 // do for sure before leaving
92 }
93 }
94 // $ANTLR end "T__21"
95
96 // $ANTLR start "T__22"
97 public final void mT__22() throws RecognitionException {
98 try {
99 int _type = T__22;
100 int _channel = DEFAULT_TOKEN_CHANNEL;
101 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:13:7: ( ',' )
102 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:13:9: ','
103 {
104 match(',');
105 }
106
107 state.type = _type;
108 state.channel = _channel;
109 }
110 finally {
111 // do for sure before leaving
112 }
113 }
114 // $ANTLR end "T__22"
115
116 // $ANTLR start "T__23"
117 public final void mT__23() throws RecognitionException {
118 try {
119 int _type = T__23;
120 int _channel = DEFAULT_TOKEN_CHANNEL;
121 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:14:7: ( '.' )
122 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:14:9: '.'
123 {
124 match('.');
125 }
126
127 state.type = _type;
128 state.channel = _channel;
129 }
130 finally {
131 // do for sure before leaving
132 }
133 }
134 // $ANTLR end "T__23"
135
136 // $ANTLR start "T__24"
137 public final void mT__24() throws RecognitionException {
138 try {
139 int _type = T__24;
140 int _channel = DEFAULT_TOKEN_CHANNEL;
141 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:15:7: ( ':' )
142 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:15:9: ':'
143 {
144 match(':');
145 }
146
147 state.type = _type;
148 state.channel = _channel;
149 }
150 finally {
151 // do for sure before leaving
152 }
153 }
154 // $ANTLR end "T__24"
155
156 // $ANTLR start "T__25"
157 public final void mT__25() throws RecognitionException {
158 try {
159 int _type = T__25;
160 int _channel = DEFAULT_TOKEN_CHANNEL;
161 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:16:7: ( '<' )
162 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:16:9: '<'
163 {
164 match('<');
165 }
166
167 state.type = _type;
168 state.channel = _channel;
169 }
170 finally {
171 // do for sure before leaving
172 }
173 }
174 // $ANTLR end "T__25"
175
176 // $ANTLR start "T__26"
177 public final void mT__26() throws RecognitionException {
178 try {
179 int _type = T__26;
180 int _channel = DEFAULT_TOKEN_CHANNEL;
181 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:17:7: ( '<-' )
182 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:17:9: '<-'
183 {
184 match("<-");
185
186 }
187
188 state.type = _type;
189 state.channel = _channel;
190 }
191 finally {
192 // do for sure before leaving
193 }
194 }
195 // $ANTLR end "T__26"
196
197 // $ANTLR start "T__27"
198 public final void mT__27() throws RecognitionException {
199 try {
200 int _type = T__27;
201 int _channel = DEFAULT_TOKEN_CHANNEL;
202 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:18:7: ( '>' )
203 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:18:9: '>'
204 {
205 match('>');
206 }
207
208 state.type = _type;
209 state.channel = _channel;
210 }
211 finally {
212 // do for sure before leaving
213 }
214 }
215 // $ANTLR end "T__27"
216
217 // $ANTLR start "T__28"
218 public final void mT__28() throws RecognitionException {
219 try {
220 int _type = T__28;
221 int _channel = DEFAULT_TOKEN_CHANNEL;
222 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:19:7: ( '?' )
223 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:19:9: '?'
224 {
225 match('?');
226 }
227
228 state.type = _type;
229 state.channel = _channel;
230 }
231 finally {
232 // do for sure before leaving
233 }
234 }
235 // $ANTLR end "T__28"
236
237 // $ANTLR start "T__29"
238 public final void mT__29() throws RecognitionException {
239 try {
240 int _type = T__29;
241 int _channel = DEFAULT_TOKEN_CHANNEL;
242 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:20:7: ( 'prefix' )
243 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:20:9: 'prefix'
244 {
245 match("prefix");
246
247 }
248
249 state.type = _type;
250 state.channel = _channel;
251 }
252 finally {
253 // do for sure before leaving
254 }
255 }
256 // $ANTLR end "T__29"
257
258 // $ANTLR start "URLSTRING"
259 public final void mURLSTRING() throws RecognitionException {
260 try {
261 int _type = URLSTRING;
262 int _channel = DEFAULT_TOKEN_CHANNEL;
263 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:138:11: ( ( 'http://' | 'file:/' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '/' | '#' | '.' | '-' | '~' | '_' )+ )
264 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:138:13: ( 'http://' | 'file:/' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '/' | '#' | '.' | '-' | '~' | '_' )+
265 {
266 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:138:13: ( 'http://' | 'file:/' )
267 int alt1=2;
268 int LA1_0 = input.LA(1);
269 if ( (LA1_0=='h') ) {
270 alt1=1;
271 }
272 else if ( (LA1_0=='f') ) {
273 alt1=2;
274 }
275
276 else {
277 NoViableAltException nvae =
278 new NoViableAltException("", 1, 0, input);
279 throw nvae;
280 }
281
282 switch (alt1) {
283 case 1 :
284 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:138:14: 'http://'
285 {
286 match("http://");
287
288 }
289 break;
290 case 2 :
291 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:138:24: 'file:/'
292 {
293 match("file:/");
294
295 }
296 break;
297
298 }
299
300 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:138:34: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '/' | '#' | '.' | '-' | '~' | '_' )+
301 int cnt2=0;
302 loop2:
303 while (true) {
304 int alt2=2;
305 int LA2_0 = input.LA(1);
306 if ( (LA2_0=='#'||(LA2_0 >= '-' && LA2_0 <= '9')||(LA2_0 >= 'A' && LA2_0 <= 'Z')||LA2_0=='_'||(LA2_0 >= 'a' && LA2_0 <= 'z')||LA2_0=='~') ) {
307 alt2=1;
308 }
309
310 switch (alt2) {
311 case 1 :
312 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:
313 {
314 if ( input.LA(1)=='#'||(input.LA(1) >= '-' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z')||input.LA(1)=='~' ) {
315 input.consume();
316 }
317 else {
318 MismatchedSetException mse = new MismatchedSetException(null,input);
319 recover(mse);
320 throw mse;
321 }
322 }
323 break;
324
325 default :
326 if ( cnt2 >= 1 ) break loop2;
327 EarlyExitException eee = new EarlyExitException(2, input);
328 throw eee;
329 }
330 cnt2++;
331 }
332
333 }
334
335 state.type = _type;
336 state.channel = _channel;
337 }
338 finally {
339 // do for sure before leaving
340 }
341 }
342 // $ANTLR end "URLSTRING"
343
344 // $ANTLR start "STRING"
345 public final void mSTRING() throws RecognitionException {
346 try {
347 int _type = STRING;
348 int _channel = DEFAULT_TOKEN_CHANNEL;
349 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:139:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '/' | '#' | '.' | '-' | '_' )+ )
350 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:139:13: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '/' | '#' | '.' | '-' | '_' )+
351 {
352 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:139:13: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '/' | '#' | '.' | '-' | '_' )+
353 int cnt3=0;
354 loop3:
355 while (true) {
356 int alt3=2;
357 int LA3_0 = input.LA(1);
358 if ( (LA3_0=='#'||(LA3_0 >= '-' && LA3_0 <= '9')||(LA3_0 >= 'A' && LA3_0 <= 'Z')||LA3_0=='_'||(LA3_0 >= 'a' && LA3_0 <= 'z')) ) {
359 alt3=1;
360 }
361
362 switch (alt3) {
363 case 1 :
364 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:
365 {
366 if ( input.LA(1)=='#'||(input.LA(1) >= '-' && input.LA(1) <= '9')||(input.LA(1) >= 'A' && input.LA(1) <= 'Z')||input.LA(1)=='_'||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
367 input.consume();
368 }
369 else {
370 MismatchedSetException mse = new MismatchedSetException(null,input);
371 recover(mse);
372 throw mse;
373 }
374 }
375 break;
376
377 default :
378 if ( cnt3 >= 1 ) break loop3;
379 EarlyExitException eee = new EarlyExitException(3, input);
380 throw eee;
381 }
382 cnt3++;
383 }
384
385 }
386
387 state.type = _type;
388 state.channel = _channel;
389 }
390 finally {
391 // do for sure before leaving
392 }
393 }
394 // $ANTLR end "STRING"
395
396 // $ANTLR start "WS"
397 public final void mWS() throws RecognitionException {
398 try {
399 int _type = WS;
400 int _channel = DEFAULT_TOKEN_CHANNEL;
401 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:140:5: ( ( ' ' | '\\n' | '\\r' )+ )
402 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:140:7: ( ' ' | '\\n' | '\\r' )+
403 {
404 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:140:7: ( ' ' | '\\n' | '\\r' )+
405 int cnt4=0;
406 loop4:
407 while (true) {
408 int alt4=2;
409 int LA4_0 = input.LA(1);
410 if ( (LA4_0=='\n'||LA4_0=='\r'||LA4_0==' ') ) {
411 alt4=1;
412 }
413
414 switch (alt4) {
415 case 1 :
416 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:
417 {
418 if ( input.LA(1)=='\n'||input.LA(1)=='\r'||input.LA(1)==' ' ) {
419 input.consume();
420 }
421 else {
422 MismatchedSetException mse = new MismatchedSetException(null,input);
423 recover(mse);
424 throw mse;
425 }
426 }
427 break;
428
429 default :
430 if ( cnt4 >= 1 ) break loop4;
431 EarlyExitException eee = new EarlyExitException(4, input);
432 throw eee;
433 }
434 cnt4++;
435 }
436
437 _channel=HIDDEN;
438 }
439
440 state.type = _type;
441 state.channel = _channel;
442 }
443 finally {
444 // do for sure before leaving
445 }
446 }
447 // $ANTLR end "WS"
448
449 @Override
450 public void mTokens() throws RecognitionException {
451 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:8: ( T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | URLSTRING | STRING | WS )
452 int alt5=13;
453 switch ( input.LA(1) ) {
454 case '(':
455 {
456 alt5=1;
457 }
458 break;
459 case ')':
460 {
461 alt5=2;
462 }
463 break;
464 case ',':
465 {
466 alt5=3;
467 }
468 break;
469 case '.':
470 {
471 int LA5_4 = input.LA(2);
472 if ( (LA5_4=='#'||(LA5_4 >= '-' && LA5_4 <= '9')||(LA5_4 >= 'A' && LA5_4 <= 'Z')||LA5_4=='_'||(LA5_4 >= 'a' && LA5_4 <= 'z')) ) {
473 alt5=12;
474 }
475
476 else {
477 alt5=4;
478 }
479
480 }
481 break;
482 case ':':
483 {
484 alt5=5;
485 }
486 break;
487 case '<':
488 {
489 int LA5_6 = input.LA(2);
490 if ( (LA5_6=='-') ) {
491 alt5=7;
492 }
493
494 else {
495 alt5=6;
496 }
497
498 }
499 break;
500 case '>':
501 {
502 alt5=8;
503 }
504 break;
505 case '?':
506 {
507 alt5=9;
508 }
509 break;
510 case 'p':
511 {
512 int LA5_9 = input.LA(2);
513 if ( (LA5_9=='r') ) {
514 int LA5_17 = input.LA(3);
515 if ( (LA5_17=='e') ) {
516 int LA5_20 = input.LA(4);
517 if ( (LA5_20=='f') ) {
518 int LA5_23 = input.LA(5);
519 if ( (LA5_23=='i') ) {
520 int LA5_26 = input.LA(6);
521 if ( (LA5_26=='x') ) {
522 int LA5_28 = input.LA(7);
523 if ( (LA5_28=='#'||(LA5_28 >= '-' && LA5_28 <= '9')||(LA5_28 >= 'A' && LA5_28 <= 'Z')||LA5_28=='_'||(LA5_28 >= 'a' && LA5_28 <= 'z')) ) {
524 alt5=12;
525 }
526
527 else {
528 alt5=10;
529 }
530
531 }
532
533 else {
534 alt5=12;
535 }
536
537 }
538
539 else {
540 alt5=12;
541 }
542
543 }
544
545 else {
546 alt5=12;
547 }
548
549 }
550
551 else {
552 alt5=12;
553 }
554
555 }
556
557 else {
558 alt5=12;
559 }
560
561 }
562 break;
563 case 'h':
564 {
565 int LA5_10 = input.LA(2);
566 if ( (LA5_10=='t') ) {
567 int LA5_18 = input.LA(3);
568 if ( (LA5_18=='t') ) {
569 int LA5_21 = input.LA(4);
570 if ( (LA5_21=='p') ) {
571 int LA5_24 = input.LA(5);
572 if ( (LA5_24==':') ) {
573 alt5=11;
574 }
575
576 else {
577 alt5=12;
578 }
579
580 }
581
582 else {
583 alt5=12;
584 }
585
586 }
587
588 else {
589 alt5=12;
590 }
591
592 }
593
594 else {
595 alt5=12;
596 }
597
598 }
599 break;
600 case 'f':
601 {
602 int LA5_11 = input.LA(2);
603 if ( (LA5_11=='i') ) {
604 int LA5_19 = input.LA(3);
605 if ( (LA5_19=='l') ) {
606 int LA5_22 = input.LA(4);
607 if ( (LA5_22=='e') ) {
608 int LA5_25 = input.LA(5);
609 if ( (LA5_25==':') ) {
610 alt5=11;
611 }
612
613 else {
614 alt5=12;
615 }
616
617 }
618
619 else {
620 alt5=12;
621 }
622
623 }
624
625 else {
626 alt5=12;
627 }
628
629 }
630
631 else {
632 alt5=12;
633 }
634
635 }
636 break;
637 case '#':
638 case '-':
639 case '/':
640 case '0':
641 case '1':
642 case '2':
643 case '3':
644 case '4':
645 case '5':
646 case '6':
647 case '7':
648 case '8':
649 case '9':
650 case 'A':
651 case 'B':
652 case 'C':
653 case 'D':
654 case 'E':
655 case 'F':
656 case 'G':
657 case 'H':
658 case 'I':
659 case 'J':
660 case 'K':
661 case 'L':
662 case 'M':
663 case 'N':
664 case 'O':
665 case 'P':
666 case 'Q':
667 case 'R':
668 case 'S':
669 case 'T':
670 case 'U':
671 case 'V':
672 case 'W':
673 case 'X':
674 case 'Y':
675 case 'Z':
676 case '_':
677 case 'a':
678 case 'b':
679 case 'c':
680 case 'd':
681 case 'e':
682 case 'g':
683 case 'i':
684 case 'j':
685 case 'k':
686 case 'l':
687 case 'm':
688 case 'n':
689 case 'o':
690 case 'q':
691 case 'r':
692 case 's':
693 case 't':
694 case 'u':
695 case 'v':
696 case 'w':
697 case 'x':
698 case 'y':
699 case 'z':
700 {
701 alt5=12;
702 }
703 break;
704 case '\n':
705 case '\r':
706 case ' ':
707 {
708 alt5=13;
709 }
710 break;
711 default:
712 NoViableAltException nvae =
713 new NoViableAltException("", 5, 0, input);
714 throw nvae;
715 }
716 switch (alt5) {
717 case 1 :
718 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:10: T__20
719 {
720 mT__20();
721
722 }
723 break;
724 case 2 :
725 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:16: T__21
726 {
727 mT__21();
728
729 }
730 break;
731 case 3 :
732 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:22: T__22
733 {
734 mT__22();
735
736 }
737 break;
738 case 4 :
739 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:28: T__23
740 {
741 mT__23();
742
743 }
744 break;
745 case 5 :
746 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:34: T__24
747 {
748 mT__24();
749
750 }
751 break;
752 case 6 :
753 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:40: T__25
754 {
755 mT__25();
756
757 }
758 break;
759 case 7 :
760 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:46: T__26
761 {
762 mT__26();
763
764 }
765 break;
766 case 8 :
767 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:52: T__27
768 {
769 mT__27();
770
771 }
772 break;
773 case 9 :
774 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:58: T__28
775 {
776 mT__28();
777
778 }
779 break;
780 case 10 :
781 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:64: T__29
782 {
783 mT__29();
784
785 }
786 break;
787 case 11 :
788 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:70: URLSTRING
789 {
790 mURLSTRING();
791
792 }
793 break;
794 case 12 :
795 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:80: STRING
796 {
797 mSTRING();
798
799 }
800 break;
801 case 13 :
802 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:1:87: WS
803 {
804 mWS();
805
806 }
807 break;
808
809 }
810 }
811
812
813
814}
diff --git a/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryParser.java b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryParser.java
new file mode 100644
index 0000000..b934e30
--- /dev/null
+++ b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryParser.java
@@ -0,0 +1,1611 @@
1// $ANTLR 3.5 /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g 2013-12-13 14:41:34
2
3package org.semanticweb.karma2.model.cqparser;
4
5import java.io.File;
6import java.io.FileInputStream;
7import java.io.InputStream;
8import java.io.FileNotFoundException;
9import java.io.IOException;
10import java.util.Set;
11
12import org.semanticweb.karma2.model.ConjunctiveQuery;
13
14
15import org.semanticweb.karma2.model.cqparser.ConjunctiveQueryWalker;
16import org.semanticweb.karma2.exception.IllegalInputQueryException;
17
18
19
20
21
22import org.antlr.runtime.*;
23import java.util.Stack;
24import java.util.List;
25import java.util.ArrayList;
26
27import org.antlr.runtime.tree.*;
28
29
30@SuppressWarnings("all")
31public class ConjunctiveQueryParser extends Parser {
32 public static final String[] tokenNames = new String[] {
33 "<invalid>", "<EOR>", "<DOWN>", "<UP>", "ATOM", "ATOM_LIST", "CONSTANT",
34 "EXPRESSION", "HEADATOM", "ID", "PREDICATE", "PREFIX", "PREFIX_LIST",
35 "RULE", "SCONSTANT", "STRING", "TERM_LIST", "URLSTRING", "VARIABLE", "WS",
36 "'('", "')'", "','", "'.'", "':'", "'<'", "'<-'", "'>'", "'?'", "'prefix'"
37 };
38 public static final int EOF=-1;
39 public static final int T__20=20;
40 public static final int T__21=21;
41 public static final int T__22=22;
42 public static final int T__23=23;
43 public static final int T__24=24;
44 public static final int T__25=25;
45 public static final int T__26=26;
46 public static final int T__27=27;
47 public static final int T__28=28;
48 public static final int T__29=29;
49 public static final int ATOM=4;
50 public static final int ATOM_LIST=5;
51 public static final int CONSTANT=6;
52 public static final int EXPRESSION=7;
53 public static final int HEADATOM=8;
54 public static final int ID=9;
55 public static final int PREDICATE=10;
56 public static final int PREFIX=11;
57 public static final int PREFIX_LIST=12;
58 public static final int RULE=13;
59 public static final int SCONSTANT=14;
60 public static final int STRING=15;
61 public static final int TERM_LIST=16;
62 public static final int URLSTRING=17;
63 public static final int VARIABLE=18;
64 public static final int WS=19;
65
66 // delegates
67 public Parser[] getDelegates() {
68 return new Parser[] {};
69 }
70
71 // delegators
72
73
74 public ConjunctiveQueryParser(TokenStream input) {
75 this(input, new RecognizerSharedState());
76 }
77 public ConjunctiveQueryParser(TokenStream input, RecognizerSharedState state) {
78 super(input, state);
79 }
80
81 protected TreeAdaptor adaptor = new CommonTreeAdaptor();
82
83 public void setTreeAdaptor(TreeAdaptor adaptor) {
84 this.adaptor = adaptor;
85 }
86 public TreeAdaptor getTreeAdaptor() {
87 return adaptor;
88 }
89 @Override public String[] getTokenNames() { return ConjunctiveQueryParser.tokenNames; }
90 @Override public String getGrammarFileName() { return "/home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g"; }
91
92
93
94
95
96 public ConjunctiveQueryParser(String string)
97 throws FileNotFoundException, IOException {
98 this(new CommonTokenStream(new ConjunctiveQueryLexer(new ANTLRStringStream(string))));
99 }
100
101 public ConjunctiveQueryParser(InputStream istream) throws FileNotFoundException, IOException {
102 this(new CommonTokenStream(new ConjunctiveQueryLexer(new ANTLRInputStream(istream))));
103
104 }
105
106
107 public ConjunctiveQueryParser(File file) throws FileNotFoundException, IOException {
108 this(new CommonTokenStream(new ConjunctiveQueryLexer(new ANTLRInputStream(new FileInputStream(file)))));
109
110 }
111
112 public ConjunctiveQuery parse() throws IllegalInputQueryException {
113 cq_return r = null;
114 try {
115 r = cq();
116 } catch (RecognitionException e) {
117 e.printStackTrace();
118 }
119 CommonTree t = (CommonTree) r.getTree();
120
121 CommonTreeNodeStream nodes = new CommonTreeNodeStream(t);
122 // AST nodes have payloads that point into token stream
123 nodes.setTokenStream(input);
124
125
126 ConjunctiveQueryWalker walker = new ConjunctiveQueryWalker();
127
128 ConjunctiveQuery cq = walker.walkExpressionNode(t);
129 return cq;
130 }
131
132 public ConjunctiveQuery parseCQ() throws IllegalInputQueryException {
133 return parse();
134 }
135
136
137
138 public static class cq_return extends ParserRuleReturnScope {
139 Object tree;
140 @Override
141 public Object getTree() { return tree; }
142 };
143
144
145 // $ANTLR start "cq"
146 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:97:1: cq : prefixlist rulebody -> ^( EXPRESSION prefixlist rulebody ) ;
147 public final ConjunctiveQueryParser.cq_return cq() throws RecognitionException {
148 ConjunctiveQueryParser.cq_return retval = new ConjunctiveQueryParser.cq_return();
149 retval.start = input.LT(1);
150
151 Object root_0 = null;
152
153 ParserRuleReturnScope prefixlist1 =null;
154 ParserRuleReturnScope rulebody2 =null;
155
156 RewriteRuleSubtreeStream stream_rulebody=new RewriteRuleSubtreeStream(adaptor,"rule rulebody");
157 RewriteRuleSubtreeStream stream_prefixlist=new RewriteRuleSubtreeStream(adaptor,"rule prefixlist");
158
159 try {
160 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:97:4: ( prefixlist rulebody -> ^( EXPRESSION prefixlist rulebody ) )
161 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:98:3: prefixlist rulebody
162 {
163 pushFollow(FOLLOW_prefixlist_in_cq132);
164 prefixlist1=prefixlist();
165 state._fsp--;
166
167 stream_prefixlist.add(prefixlist1.getTree());
168 pushFollow(FOLLOW_rulebody_in_cq134);
169 rulebody2=rulebody();
170 state._fsp--;
171
172 stream_rulebody.add(rulebody2.getTree());
173 // AST REWRITE
174 // elements: rulebody, prefixlist
175 // token labels:
176 // rule labels: retval
177 // token list labels:
178 // rule list labels:
179 // wildcard labels:
180 retval.tree = root_0;
181 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
182
183 root_0 = (Object)adaptor.nil();
184 // 98:23: -> ^( EXPRESSION prefixlist rulebody )
185 {
186 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:98:26: ^( EXPRESSION prefixlist rulebody )
187 {
188 Object root_1 = (Object)adaptor.nil();
189 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXPRESSION, "EXPRESSION"), root_1);
190 adaptor.addChild(root_1, stream_prefixlist.nextTree());
191 adaptor.addChild(root_1, stream_rulebody.nextTree());
192 adaptor.addChild(root_0, root_1);
193 }
194
195 }
196
197
198 retval.tree = root_0;
199
200 }
201
202 retval.stop = input.LT(-1);
203
204 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
205 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
206
207 }
208 catch (RecognitionException re) {
209 reportError(re);
210 recover(input,re);
211 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
212 }
213 finally {
214 // do for sure before leaving
215 }
216 return retval;
217 }
218 // $ANTLR end "cq"
219
220
221 public static class prefixlist_return extends ParserRuleReturnScope {
222 Object tree;
223 @Override
224 public Object getTree() { return tree; }
225 };
226
227
228 // $ANTLR start "prefixlist"
229 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:100:1: prefixlist : prefix ( ',' prefix )* -> ^( PREFIX_LIST ( prefix )* ) ;
230 public final ConjunctiveQueryParser.prefixlist_return prefixlist() throws RecognitionException {
231 ConjunctiveQueryParser.prefixlist_return retval = new ConjunctiveQueryParser.prefixlist_return();
232 retval.start = input.LT(1);
233
234 Object root_0 = null;
235
236 Token char_literal4=null;
237 ParserRuleReturnScope prefix3 =null;
238 ParserRuleReturnScope prefix5 =null;
239
240 Object char_literal4_tree=null;
241 RewriteRuleTokenStream stream_22=new RewriteRuleTokenStream(adaptor,"token 22");
242 RewriteRuleSubtreeStream stream_prefix=new RewriteRuleSubtreeStream(adaptor,"rule prefix");
243
244 try {
245 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:100:11: ( prefix ( ',' prefix )* -> ^( PREFIX_LIST ( prefix )* ) )
246 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:101:3: prefix ( ',' prefix )*
247 {
248 pushFollow(FOLLOW_prefix_in_prefixlist154);
249 prefix3=prefix();
250 state._fsp--;
251
252 stream_prefix.add(prefix3.getTree());
253 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:101:10: ( ',' prefix )*
254 loop1:
255 while (true) {
256 int alt1=2;
257 int LA1_0 = input.LA(1);
258 if ( (LA1_0==22) ) {
259 alt1=1;
260 }
261
262 switch (alt1) {
263 case 1 :
264 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:101:11: ',' prefix
265 {
266 char_literal4=(Token)match(input,22,FOLLOW_22_in_prefixlist157);
267 stream_22.add(char_literal4);
268
269 pushFollow(FOLLOW_prefix_in_prefixlist159);
270 prefix5=prefix();
271 state._fsp--;
272
273 stream_prefix.add(prefix5.getTree());
274 }
275 break;
276
277 default :
278 break loop1;
279 }
280 }
281
282 // AST REWRITE
283 // elements: prefix
284 // token labels:
285 // rule labels: retval
286 // token list labels:
287 // rule list labels:
288 // wildcard labels:
289 retval.tree = root_0;
290 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
291
292 root_0 = (Object)adaptor.nil();
293 // 101:24: -> ^( PREFIX_LIST ( prefix )* )
294 {
295 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:101:27: ^( PREFIX_LIST ( prefix )* )
296 {
297 Object root_1 = (Object)adaptor.nil();
298 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PREFIX_LIST, "PREFIX_LIST"), root_1);
299 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:101:41: ( prefix )*
300 while ( stream_prefix.hasNext() ) {
301 adaptor.addChild(root_1, stream_prefix.nextTree());
302 }
303 stream_prefix.reset();
304
305 adaptor.addChild(root_0, root_1);
306 }
307
308 }
309
310
311 retval.tree = root_0;
312
313 }
314
315 retval.stop = input.LT(-1);
316
317 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
318 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
319
320 }
321 catch (RecognitionException re) {
322 reportError(re);
323 recover(input,re);
324 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
325 }
326 finally {
327 // do for sure before leaving
328 }
329 return retval;
330 }
331 // $ANTLR end "prefixlist"
332
333
334 public static class prefix_return extends ParserRuleReturnScope {
335 Object tree;
336 @Override
337 public Object getTree() { return tree; }
338 };
339
340
341 // $ANTLR start "prefix"
342 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:103:1: prefix : 'prefix' id ':' '<' url '>' -> ^( PREFIX id url ) ;
343 public final ConjunctiveQueryParser.prefix_return prefix() throws RecognitionException {
344 ConjunctiveQueryParser.prefix_return retval = new ConjunctiveQueryParser.prefix_return();
345 retval.start = input.LT(1);
346
347 Object root_0 = null;
348
349 Token string_literal6=null;
350 Token char_literal8=null;
351 Token char_literal9=null;
352 Token char_literal11=null;
353 ParserRuleReturnScope id7 =null;
354 ParserRuleReturnScope url10 =null;
355
356 Object string_literal6_tree=null;
357 Object char_literal8_tree=null;
358 Object char_literal9_tree=null;
359 Object char_literal11_tree=null;
360 RewriteRuleTokenStream stream_24=new RewriteRuleTokenStream(adaptor,"token 24");
361 RewriteRuleTokenStream stream_25=new RewriteRuleTokenStream(adaptor,"token 25");
362 RewriteRuleTokenStream stream_27=new RewriteRuleTokenStream(adaptor,"token 27");
363 RewriteRuleTokenStream stream_29=new RewriteRuleTokenStream(adaptor,"token 29");
364 RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
365 RewriteRuleSubtreeStream stream_url=new RewriteRuleSubtreeStream(adaptor,"rule url");
366
367 try {
368 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:103:7: ( 'prefix' id ':' '<' url '>' -> ^( PREFIX id url ) )
369 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:104:3: 'prefix' id ':' '<' url '>'
370 {
371 string_literal6=(Token)match(input,29,FOLLOW_29_in_prefix181);
372 stream_29.add(string_literal6);
373
374 pushFollow(FOLLOW_id_in_prefix183);
375 id7=id();
376 state._fsp--;
377
378 stream_id.add(id7.getTree());
379 char_literal8=(Token)match(input,24,FOLLOW_24_in_prefix185);
380 stream_24.add(char_literal8);
381
382 char_literal9=(Token)match(input,25,FOLLOW_25_in_prefix187);
383 stream_25.add(char_literal9);
384
385 pushFollow(FOLLOW_url_in_prefix189);
386 url10=url();
387 state._fsp--;
388
389 stream_url.add(url10.getTree());
390 char_literal11=(Token)match(input,27,FOLLOW_27_in_prefix191);
391 stream_27.add(char_literal11);
392
393 // AST REWRITE
394 // elements: id, url
395 // token labels:
396 // rule labels: retval
397 // token list labels:
398 // rule list labels:
399 // wildcard labels:
400 retval.tree = root_0;
401 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
402
403 root_0 = (Object)adaptor.nil();
404 // 104:31: -> ^( PREFIX id url )
405 {
406 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:104:34: ^( PREFIX id url )
407 {
408 Object root_1 = (Object)adaptor.nil();
409 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PREFIX, "PREFIX"), root_1);
410 adaptor.addChild(root_1, stream_id.nextTree());
411 adaptor.addChild(root_1, stream_url.nextTree());
412 adaptor.addChild(root_0, root_1);
413 }
414
415 }
416
417
418 retval.tree = root_0;
419
420 }
421
422 retval.stop = input.LT(-1);
423
424 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
425 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
426
427 }
428 catch (RecognitionException re) {
429 reportError(re);
430 recover(input,re);
431 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
432 }
433 finally {
434 // do for sure before leaving
435 }
436 return retval;
437 }
438 // $ANTLR end "prefix"
439
440
441 public static class rulebody_return extends ParserRuleReturnScope {
442 Object tree;
443 @Override
444 public Object getTree() { return tree; }
445 };
446
447
448 // $ANTLR start "rulebody"
449 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:107:1: rulebody : headatom ( '<-' | ':' ) body ( '.' )? -> ^( RULE headatom body ) ;
450 public final ConjunctiveQueryParser.rulebody_return rulebody() throws RecognitionException {
451 ConjunctiveQueryParser.rulebody_return retval = new ConjunctiveQueryParser.rulebody_return();
452 retval.start = input.LT(1);
453
454 Object root_0 = null;
455
456 Token string_literal13=null;
457 Token char_literal14=null;
458 Token char_literal16=null;
459 ParserRuleReturnScope headatom12 =null;
460 ParserRuleReturnScope body15 =null;
461
462 Object string_literal13_tree=null;
463 Object char_literal14_tree=null;
464 Object char_literal16_tree=null;
465 RewriteRuleTokenStream stream_23=new RewriteRuleTokenStream(adaptor,"token 23");
466 RewriteRuleTokenStream stream_24=new RewriteRuleTokenStream(adaptor,"token 24");
467 RewriteRuleTokenStream stream_26=new RewriteRuleTokenStream(adaptor,"token 26");
468 RewriteRuleSubtreeStream stream_headatom=new RewriteRuleSubtreeStream(adaptor,"rule headatom");
469 RewriteRuleSubtreeStream stream_body=new RewriteRuleSubtreeStream(adaptor,"rule body");
470
471 try {
472 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:107:9: ( headatom ( '<-' | ':' ) body ( '.' )? -> ^( RULE headatom body ) )
473 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:108:3: headatom ( '<-' | ':' ) body ( '.' )?
474 {
475 pushFollow(FOLLOW_headatom_in_rulebody213);
476 headatom12=headatom();
477 state._fsp--;
478
479 stream_headatom.add(headatom12.getTree());
480 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:108:12: ( '<-' | ':' )
481 int alt2=2;
482 int LA2_0 = input.LA(1);
483 if ( (LA2_0==26) ) {
484 alt2=1;
485 }
486 else if ( (LA2_0==24) ) {
487 alt2=2;
488 }
489
490 else {
491 NoViableAltException nvae =
492 new NoViableAltException("", 2, 0, input);
493 throw nvae;
494 }
495
496 switch (alt2) {
497 case 1 :
498 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:108:13: '<-'
499 {
500 string_literal13=(Token)match(input,26,FOLLOW_26_in_rulebody216);
501 stream_26.add(string_literal13);
502
503 }
504 break;
505 case 2 :
506 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:108:18: ':'
507 {
508 char_literal14=(Token)match(input,24,FOLLOW_24_in_rulebody218);
509 stream_24.add(char_literal14);
510
511 }
512 break;
513
514 }
515
516 pushFollow(FOLLOW_body_in_rulebody221);
517 body15=body();
518 state._fsp--;
519
520 stream_body.add(body15.getTree());
521 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:108:28: ( '.' )?
522 int alt3=2;
523 int LA3_0 = input.LA(1);
524 if ( (LA3_0==23) ) {
525 alt3=1;
526 }
527 switch (alt3) {
528 case 1 :
529 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:108:28: '.'
530 {
531 char_literal16=(Token)match(input,23,FOLLOW_23_in_rulebody223);
532 stream_23.add(char_literal16);
533
534 }
535 break;
536
537 }
538
539 // AST REWRITE
540 // elements: headatom, body
541 // token labels:
542 // rule labels: retval
543 // token list labels:
544 // rule list labels:
545 // wildcard labels:
546 retval.tree = root_0;
547 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
548
549 root_0 = (Object)adaptor.nil();
550 // 108:34: -> ^( RULE headatom body )
551 {
552 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:108:37: ^( RULE headatom body )
553 {
554 Object root_1 = (Object)adaptor.nil();
555 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(RULE, "RULE"), root_1);
556 adaptor.addChild(root_1, stream_headatom.nextTree());
557 adaptor.addChild(root_1, stream_body.nextTree());
558 adaptor.addChild(root_0, root_1);
559 }
560
561 }
562
563
564 retval.tree = root_0;
565
566 }
567
568 retval.stop = input.LT(-1);
569
570 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
571 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
572
573 }
574 catch (RecognitionException re) {
575 reportError(re);
576 recover(input,re);
577 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
578 }
579 finally {
580 // do for sure before leaving
581 }
582 return retval;
583 }
584 // $ANTLR end "rulebody"
585
586
587 public static class body_return extends ParserRuleReturnScope {
588 Object tree;
589 @Override
590 public Object getTree() { return tree; }
591 };
592
593
594 // $ANTLR start "body"
595 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:110:1: body : atom ( ',' atom )* -> ^( ATOM_LIST ( atom )* ) ;
596 public final ConjunctiveQueryParser.body_return body() throws RecognitionException {
597 ConjunctiveQueryParser.body_return retval = new ConjunctiveQueryParser.body_return();
598 retval.start = input.LT(1);
599
600 Object root_0 = null;
601
602 Token char_literal18=null;
603 ParserRuleReturnScope atom17 =null;
604 ParserRuleReturnScope atom19 =null;
605
606 Object char_literal18_tree=null;
607 RewriteRuleTokenStream stream_22=new RewriteRuleTokenStream(adaptor,"token 22");
608 RewriteRuleSubtreeStream stream_atom=new RewriteRuleSubtreeStream(adaptor,"rule atom");
609
610 try {
611 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:110:5: ( atom ( ',' atom )* -> ^( ATOM_LIST ( atom )* ) )
612 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:111:3: atom ( ',' atom )*
613 {
614 pushFollow(FOLLOW_atom_in_body245);
615 atom17=atom();
616 state._fsp--;
617
618 stream_atom.add(atom17.getTree());
619 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:111:8: ( ',' atom )*
620 loop4:
621 while (true) {
622 int alt4=2;
623 int LA4_0 = input.LA(1);
624 if ( (LA4_0==22) ) {
625 alt4=1;
626 }
627
628 switch (alt4) {
629 case 1 :
630 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:111:9: ',' atom
631 {
632 char_literal18=(Token)match(input,22,FOLLOW_22_in_body248);
633 stream_22.add(char_literal18);
634
635 pushFollow(FOLLOW_atom_in_body250);
636 atom19=atom();
637 state._fsp--;
638
639 stream_atom.add(atom19.getTree());
640 }
641 break;
642
643 default :
644 break loop4;
645 }
646 }
647
648 // AST REWRITE
649 // elements: atom
650 // token labels:
651 // rule labels: retval
652 // token list labels:
653 // rule list labels:
654 // wildcard labels:
655 retval.tree = root_0;
656 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
657
658 root_0 = (Object)adaptor.nil();
659 // 111:20: -> ^( ATOM_LIST ( atom )* )
660 {
661 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:111:23: ^( ATOM_LIST ( atom )* )
662 {
663 Object root_1 = (Object)adaptor.nil();
664 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ATOM_LIST, "ATOM_LIST"), root_1);
665 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:111:35: ( atom )*
666 while ( stream_atom.hasNext() ) {
667 adaptor.addChild(root_1, stream_atom.nextTree());
668 }
669 stream_atom.reset();
670
671 adaptor.addChild(root_0, root_1);
672 }
673
674 }
675
676
677 retval.tree = root_0;
678
679 }
680
681 retval.stop = input.LT(-1);
682
683 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
684 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
685
686 }
687 catch (RecognitionException re) {
688 reportError(re);
689 recover(input,re);
690 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
691 }
692 finally {
693 // do for sure before leaving
694 }
695 return retval;
696 }
697 // $ANTLR end "body"
698
699
700 public static class headatom_return extends ParserRuleReturnScope {
701 Object tree;
702 @Override
703 public Object getTree() { return tree; }
704 };
705
706
707 // $ANTLR start "headatom"
708 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:114:1: headatom : id '(' term ( ',' term )* ')' -> ^( HEADATOM ( term )* ) ;
709 public final ConjunctiveQueryParser.headatom_return headatom() throws RecognitionException {
710 ConjunctiveQueryParser.headatom_return retval = new ConjunctiveQueryParser.headatom_return();
711 retval.start = input.LT(1);
712
713 Object root_0 = null;
714
715 Token char_literal21=null;
716 Token char_literal23=null;
717 Token char_literal25=null;
718 ParserRuleReturnScope id20 =null;
719 ParserRuleReturnScope term22 =null;
720 ParserRuleReturnScope term24 =null;
721
722 Object char_literal21_tree=null;
723 Object char_literal23_tree=null;
724 Object char_literal25_tree=null;
725 RewriteRuleTokenStream stream_21=new RewriteRuleTokenStream(adaptor,"token 21");
726 RewriteRuleTokenStream stream_20=new RewriteRuleTokenStream(adaptor,"token 20");
727 RewriteRuleTokenStream stream_22=new RewriteRuleTokenStream(adaptor,"token 22");
728 RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
729 RewriteRuleSubtreeStream stream_term=new RewriteRuleSubtreeStream(adaptor,"rule term");
730
731 try {
732 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:114:9: ( id '(' term ( ',' term )* ')' -> ^( HEADATOM ( term )* ) )
733 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:115:3: id '(' term ( ',' term )* ')'
734 {
735 pushFollow(FOLLOW_id_in_headatom276);
736 id20=id();
737 state._fsp--;
738
739 stream_id.add(id20.getTree());
740 char_literal21=(Token)match(input,20,FOLLOW_20_in_headatom278);
741 stream_20.add(char_literal21);
742
743 pushFollow(FOLLOW_term_in_headatom280);
744 term22=term();
745 state._fsp--;
746
747 stream_term.add(term22.getTree());
748 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:115:15: ( ',' term )*
749 loop5:
750 while (true) {
751 int alt5=2;
752 int LA5_0 = input.LA(1);
753 if ( (LA5_0==22) ) {
754 alt5=1;
755 }
756
757 switch (alt5) {
758 case 1 :
759 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:115:16: ',' term
760 {
761 char_literal23=(Token)match(input,22,FOLLOW_22_in_headatom283);
762 stream_22.add(char_literal23);
763
764 pushFollow(FOLLOW_term_in_headatom285);
765 term24=term();
766 state._fsp--;
767
768 stream_term.add(term24.getTree());
769 }
770 break;
771
772 default :
773 break loop5;
774 }
775 }
776
777 char_literal25=(Token)match(input,21,FOLLOW_21_in_headatom289);
778 stream_21.add(char_literal25);
779
780 // AST REWRITE
781 // elements: term
782 // token labels:
783 // rule labels: retval
784 // token list labels:
785 // rule list labels:
786 // wildcard labels:
787 retval.tree = root_0;
788 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
789
790 root_0 = (Object)adaptor.nil();
791 // 115:31: -> ^( HEADATOM ( term )* )
792 {
793 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:115:34: ^( HEADATOM ( term )* )
794 {
795 Object root_1 = (Object)adaptor.nil();
796 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(HEADATOM, "HEADATOM"), root_1);
797 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:115:45: ( term )*
798 while ( stream_term.hasNext() ) {
799 adaptor.addChild(root_1, stream_term.nextTree());
800 }
801 stream_term.reset();
802
803 adaptor.addChild(root_0, root_1);
804 }
805
806 }
807
808
809 retval.tree = root_0;
810
811 }
812
813 retval.stop = input.LT(-1);
814
815 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
816 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
817
818 }
819 catch (RecognitionException re) {
820 reportError(re);
821 recover(input,re);
822 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
823 }
824 finally {
825 // do for sure before leaving
826 }
827 return retval;
828 }
829 // $ANTLR end "headatom"
830
831
832 public static class atom_return extends ParserRuleReturnScope {
833 Object tree;
834 @Override
835 public Object getTree() { return tree; }
836 };
837
838
839 // $ANTLR start "atom"
840 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:117:1: atom : compositeid '(' term ( ',' term )* ')' -> ^( ATOM compositeid ( term )* ) ;
841 public final ConjunctiveQueryParser.atom_return atom() throws RecognitionException {
842 ConjunctiveQueryParser.atom_return retval = new ConjunctiveQueryParser.atom_return();
843 retval.start = input.LT(1);
844
845 Object root_0 = null;
846
847 Token char_literal27=null;
848 Token char_literal29=null;
849 Token char_literal31=null;
850 ParserRuleReturnScope compositeid26 =null;
851 ParserRuleReturnScope term28 =null;
852 ParserRuleReturnScope term30 =null;
853
854 Object char_literal27_tree=null;
855 Object char_literal29_tree=null;
856 Object char_literal31_tree=null;
857 RewriteRuleTokenStream stream_21=new RewriteRuleTokenStream(adaptor,"token 21");
858 RewriteRuleTokenStream stream_20=new RewriteRuleTokenStream(adaptor,"token 20");
859 RewriteRuleTokenStream stream_22=new RewriteRuleTokenStream(adaptor,"token 22");
860 RewriteRuleSubtreeStream stream_term=new RewriteRuleSubtreeStream(adaptor,"rule term");
861 RewriteRuleSubtreeStream stream_compositeid=new RewriteRuleSubtreeStream(adaptor,"rule compositeid");
862
863 try {
864 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:117:5: ( compositeid '(' term ( ',' term )* ')' -> ^( ATOM compositeid ( term )* ) )
865 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:118:3: compositeid '(' term ( ',' term )* ')'
866 {
867 pushFollow(FOLLOW_compositeid_in_atom309);
868 compositeid26=compositeid();
869 state._fsp--;
870
871 stream_compositeid.add(compositeid26.getTree());
872 char_literal27=(Token)match(input,20,FOLLOW_20_in_atom311);
873 stream_20.add(char_literal27);
874
875 pushFollow(FOLLOW_term_in_atom313);
876 term28=term();
877 state._fsp--;
878
879 stream_term.add(term28.getTree());
880 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:118:24: ( ',' term )*
881 loop6:
882 while (true) {
883 int alt6=2;
884 int LA6_0 = input.LA(1);
885 if ( (LA6_0==22) ) {
886 alt6=1;
887 }
888
889 switch (alt6) {
890 case 1 :
891 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:118:25: ',' term
892 {
893 char_literal29=(Token)match(input,22,FOLLOW_22_in_atom316);
894 stream_22.add(char_literal29);
895
896 pushFollow(FOLLOW_term_in_atom318);
897 term30=term();
898 state._fsp--;
899
900 stream_term.add(term30.getTree());
901 }
902 break;
903
904 default :
905 break loop6;
906 }
907 }
908
909 char_literal31=(Token)match(input,21,FOLLOW_21_in_atom322);
910 stream_21.add(char_literal31);
911
912 // AST REWRITE
913 // elements: term, compositeid
914 // token labels:
915 // rule labels: retval
916 // token list labels:
917 // rule list labels:
918 // wildcard labels:
919 retval.tree = root_0;
920 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
921
922 root_0 = (Object)adaptor.nil();
923 // 118:40: -> ^( ATOM compositeid ( term )* )
924 {
925 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:118:43: ^( ATOM compositeid ( term )* )
926 {
927 Object root_1 = (Object)adaptor.nil();
928 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ATOM, "ATOM"), root_1);
929 adaptor.addChild(root_1, stream_compositeid.nextTree());
930 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:118:62: ( term )*
931 while ( stream_term.hasNext() ) {
932 adaptor.addChild(root_1, stream_term.nextTree());
933 }
934 stream_term.reset();
935
936 adaptor.addChild(root_0, root_1);
937 }
938
939 }
940
941
942 retval.tree = root_0;
943
944 }
945
946 retval.stop = input.LT(-1);
947
948 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
949 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
950
951 }
952 catch (RecognitionException re) {
953 reportError(re);
954 recover(input,re);
955 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
956 }
957 finally {
958 // do for sure before leaving
959 }
960 return retval;
961 }
962 // $ANTLR end "atom"
963
964
965 public static class compositeid_return extends ParserRuleReturnScope {
966 Object tree;
967 @Override
968 public Object getTree() { return tree; }
969 };
970
971
972 // $ANTLR start "compositeid"
973 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:120:1: compositeid : ( id ) ':' ( id ) -> ^( ID id id ) ;
974 public final ConjunctiveQueryParser.compositeid_return compositeid() throws RecognitionException {
975 ConjunctiveQueryParser.compositeid_return retval = new ConjunctiveQueryParser.compositeid_return();
976 retval.start = input.LT(1);
977
978 Object root_0 = null;
979
980 Token char_literal33=null;
981 ParserRuleReturnScope id32 =null;
982 ParserRuleReturnScope id34 =null;
983
984 Object char_literal33_tree=null;
985 RewriteRuleTokenStream stream_24=new RewriteRuleTokenStream(adaptor,"token 24");
986 RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
987
988 try {
989 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:120:12: ( ( id ) ':' ( id ) -> ^( ID id id ) )
990 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:121:2: ( id ) ':' ( id )
991 {
992 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:121:2: ( id )
993 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:121:3: id
994 {
995 pushFollow(FOLLOW_id_in_compositeid342);
996 id32=id();
997 state._fsp--;
998
999 stream_id.add(id32.getTree());
1000 }
1001
1002 char_literal33=(Token)match(input,24,FOLLOW_24_in_compositeid345);
1003 stream_24.add(char_literal33);
1004
1005 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:121:11: ( id )
1006 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:121:12: id
1007 {
1008 pushFollow(FOLLOW_id_in_compositeid348);
1009 id34=id();
1010 state._fsp--;
1011
1012 stream_id.add(id34.getTree());
1013 }
1014
1015 // AST REWRITE
1016 // elements: id, id
1017 // token labels:
1018 // rule labels: retval
1019 // token list labels:
1020 // rule list labels:
1021 // wildcard labels:
1022 retval.tree = root_0;
1023 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
1024
1025 root_0 = (Object)adaptor.nil();
1026 // 121:16: -> ^( ID id id )
1027 {
1028 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:121:19: ^( ID id id )
1029 {
1030 Object root_1 = (Object)adaptor.nil();
1031 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ID, "ID"), root_1);
1032 adaptor.addChild(root_1, stream_id.nextTree());
1033 adaptor.addChild(root_1, stream_id.nextTree());
1034 adaptor.addChild(root_0, root_1);
1035 }
1036
1037 }
1038
1039
1040 retval.tree = root_0;
1041
1042 }
1043
1044 retval.stop = input.LT(-1);
1045
1046 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
1047 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
1048
1049 }
1050 catch (RecognitionException re) {
1051 reportError(re);
1052 recover(input,re);
1053 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
1054 }
1055 finally {
1056 // do for sure before leaving
1057 }
1058 return retval;
1059 }
1060 // $ANTLR end "compositeid"
1061
1062
1063 public static class term_return extends ParserRuleReturnScope {
1064 Object tree;
1065 @Override
1066 public Object getTree() { return tree; }
1067 };
1068
1069
1070 // $ANTLR start "term"
1071 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:124:1: term : ( variable -> ^( VARIABLE variable ) | simpleid -> ^( SCONSTANT simpleid ) | compositeid -> ^( CONSTANT compositeid ) );
1072 public final ConjunctiveQueryParser.term_return term() throws RecognitionException {
1073 ConjunctiveQueryParser.term_return retval = new ConjunctiveQueryParser.term_return();
1074 retval.start = input.LT(1);
1075
1076 Object root_0 = null;
1077
1078 ParserRuleReturnScope variable35 =null;
1079 ParserRuleReturnScope simpleid36 =null;
1080 ParserRuleReturnScope compositeid37 =null;
1081
1082 RewriteRuleSubtreeStream stream_simpleid=new RewriteRuleSubtreeStream(adaptor,"rule simpleid");
1083 RewriteRuleSubtreeStream stream_compositeid=new RewriteRuleSubtreeStream(adaptor,"rule compositeid");
1084 RewriteRuleSubtreeStream stream_variable=new RewriteRuleSubtreeStream(adaptor,"rule variable");
1085
1086 try {
1087 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:124:5: ( variable -> ^( VARIABLE variable ) | simpleid -> ^( SCONSTANT simpleid ) | compositeid -> ^( CONSTANT compositeid ) )
1088 int alt7=3;
1089 switch ( input.LA(1) ) {
1090 case 28:
1091 {
1092 alt7=1;
1093 }
1094 break;
1095 case 25:
1096 {
1097 alt7=2;
1098 }
1099 break;
1100 case STRING:
1101 {
1102 alt7=3;
1103 }
1104 break;
1105 default:
1106 NoViableAltException nvae =
1107 new NoViableAltException("", 7, 0, input);
1108 throw nvae;
1109 }
1110 switch (alt7) {
1111 case 1 :
1112 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:125:3: variable
1113 {
1114 pushFollow(FOLLOW_variable_in_term371);
1115 variable35=variable();
1116 state._fsp--;
1117
1118 stream_variable.add(variable35.getTree());
1119 // AST REWRITE
1120 // elements: variable
1121 // token labels:
1122 // rule labels: retval
1123 // token list labels:
1124 // rule list labels:
1125 // wildcard labels:
1126 retval.tree = root_0;
1127 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
1128
1129 root_0 = (Object)adaptor.nil();
1130 // 125:12: -> ^( VARIABLE variable )
1131 {
1132 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:125:15: ^( VARIABLE variable )
1133 {
1134 Object root_1 = (Object)adaptor.nil();
1135 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(VARIABLE, "VARIABLE"), root_1);
1136 adaptor.addChild(root_1, stream_variable.nextTree());
1137 adaptor.addChild(root_0, root_1);
1138 }
1139
1140 }
1141
1142
1143 retval.tree = root_0;
1144
1145 }
1146 break;
1147 case 2 :
1148 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:126:5: simpleid
1149 {
1150 pushFollow(FOLLOW_simpleid_in_term386);
1151 simpleid36=simpleid();
1152 state._fsp--;
1153
1154 stream_simpleid.add(simpleid36.getTree());
1155 // AST REWRITE
1156 // elements: simpleid
1157 // token labels:
1158 // rule labels: retval
1159 // token list labels:
1160 // rule list labels:
1161 // wildcard labels:
1162 retval.tree = root_0;
1163 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
1164
1165 root_0 = (Object)adaptor.nil();
1166 // 126:14: -> ^( SCONSTANT simpleid )
1167 {
1168 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:126:17: ^( SCONSTANT simpleid )
1169 {
1170 Object root_1 = (Object)adaptor.nil();
1171 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SCONSTANT, "SCONSTANT"), root_1);
1172 adaptor.addChild(root_1, stream_simpleid.nextTree());
1173 adaptor.addChild(root_0, root_1);
1174 }
1175
1176 }
1177
1178
1179 retval.tree = root_0;
1180
1181 }
1182 break;
1183 case 3 :
1184 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:127:5: compositeid
1185 {
1186 pushFollow(FOLLOW_compositeid_in_term400);
1187 compositeid37=compositeid();
1188 state._fsp--;
1189
1190 stream_compositeid.add(compositeid37.getTree());
1191 // AST REWRITE
1192 // elements: compositeid
1193 // token labels:
1194 // rule labels: retval
1195 // token list labels:
1196 // rule list labels:
1197 // wildcard labels:
1198 retval.tree = root_0;
1199 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
1200
1201 root_0 = (Object)adaptor.nil();
1202 // 127:17: -> ^( CONSTANT compositeid )
1203 {
1204 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:127:20: ^( CONSTANT compositeid )
1205 {
1206 Object root_1 = (Object)adaptor.nil();
1207 root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONSTANT, "CONSTANT"), root_1);
1208 adaptor.addChild(root_1, stream_compositeid.nextTree());
1209 adaptor.addChild(root_0, root_1);
1210 }
1211
1212 }
1213
1214
1215 retval.tree = root_0;
1216
1217 }
1218 break;
1219
1220 }
1221 retval.stop = input.LT(-1);
1222
1223 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
1224 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
1225
1226 }
1227 catch (RecognitionException re) {
1228 reportError(re);
1229 recover(input,re);
1230 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
1231 }
1232 finally {
1233 // do for sure before leaving
1234 }
1235 return retval;
1236 }
1237 // $ANTLR end "term"
1238
1239
1240 public static class id_return extends ParserRuleReturnScope {
1241 Object tree;
1242 @Override
1243 public Object getTree() { return tree; }
1244 };
1245
1246
1247 // $ANTLR start "id"
1248 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:129:1: id : ( STRING ) ;
1249 public final ConjunctiveQueryParser.id_return id() throws RecognitionException {
1250 ConjunctiveQueryParser.id_return retval = new ConjunctiveQueryParser.id_return();
1251 retval.start = input.LT(1);
1252
1253 Object root_0 = null;
1254
1255 Token STRING38=null;
1256
1257 Object STRING38_tree=null;
1258
1259 try {
1260 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:129:4: ( ( STRING ) )
1261 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:129:6: ( STRING )
1262 {
1263 root_0 = (Object)adaptor.nil();
1264
1265
1266 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:129:6: ( STRING )
1267 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:129:7: STRING
1268 {
1269 STRING38=(Token)match(input,STRING,FOLLOW_STRING_in_id417);
1270 STRING38_tree = (Object)adaptor.create(STRING38);
1271 adaptor.addChild(root_0, STRING38_tree);
1272
1273 }
1274
1275 }
1276
1277 retval.stop = input.LT(-1);
1278
1279 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
1280 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
1281
1282 }
1283 catch (RecognitionException re) {
1284 reportError(re);
1285 recover(input,re);
1286 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
1287 }
1288 finally {
1289 // do for sure before leaving
1290 }
1291 return retval;
1292 }
1293 // $ANTLR end "id"
1294
1295
1296 public static class simpleid_return extends ParserRuleReturnScope {
1297 Object tree;
1298 @Override
1299 public Object getTree() { return tree; }
1300 };
1301
1302
1303 // $ANTLR start "simpleid"
1304 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:130:1: simpleid : ( '<' URLSTRING '>' | '<' STRING '>' );
1305 public final ConjunctiveQueryParser.simpleid_return simpleid() throws RecognitionException {
1306 ConjunctiveQueryParser.simpleid_return retval = new ConjunctiveQueryParser.simpleid_return();
1307 retval.start = input.LT(1);
1308
1309 Object root_0 = null;
1310
1311 Token char_literal39=null;
1312 Token URLSTRING40=null;
1313 Token char_literal41=null;
1314 Token char_literal42=null;
1315 Token STRING43=null;
1316 Token char_literal44=null;
1317
1318 Object char_literal39_tree=null;
1319 Object URLSTRING40_tree=null;
1320 Object char_literal41_tree=null;
1321 Object char_literal42_tree=null;
1322 Object STRING43_tree=null;
1323 Object char_literal44_tree=null;
1324
1325 try {
1326 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:130:10: ( '<' URLSTRING '>' | '<' STRING '>' )
1327 int alt8=2;
1328 int LA8_0 = input.LA(1);
1329 if ( (LA8_0==25) ) {
1330 int LA8_1 = input.LA(2);
1331 if ( (LA8_1==URLSTRING) ) {
1332 alt8=1;
1333 }
1334 else if ( (LA8_1==STRING) ) {
1335 alt8=2;
1336 }
1337
1338 else {
1339 int nvaeMark = input.mark();
1340 try {
1341 input.consume();
1342 NoViableAltException nvae =
1343 new NoViableAltException("", 8, 1, input);
1344 throw nvae;
1345 } finally {
1346 input.rewind(nvaeMark);
1347 }
1348 }
1349
1350 }
1351
1352 else {
1353 NoViableAltException nvae =
1354 new NoViableAltException("", 8, 0, input);
1355 throw nvae;
1356 }
1357
1358 switch (alt8) {
1359 case 1 :
1360 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:130:12: '<' URLSTRING '>'
1361 {
1362 root_0 = (Object)adaptor.nil();
1363
1364
1365 char_literal39=(Token)match(input,25,FOLLOW_25_in_simpleid425);
1366 char_literal39_tree = (Object)adaptor.create(char_literal39);
1367 adaptor.addChild(root_0, char_literal39_tree);
1368
1369 URLSTRING40=(Token)match(input,URLSTRING,FOLLOW_URLSTRING_in_simpleid427);
1370 URLSTRING40_tree = (Object)adaptor.create(URLSTRING40);
1371 adaptor.addChild(root_0, URLSTRING40_tree);
1372
1373 char_literal41=(Token)match(input,27,FOLLOW_27_in_simpleid429);
1374 char_literal41_tree = (Object)adaptor.create(char_literal41);
1375 adaptor.addChild(root_0, char_literal41_tree);
1376
1377 }
1378 break;
1379 case 2 :
1380 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:130:32: '<' STRING '>'
1381 {
1382 root_0 = (Object)adaptor.nil();
1383
1384
1385 char_literal42=(Token)match(input,25,FOLLOW_25_in_simpleid433);
1386 char_literal42_tree = (Object)adaptor.create(char_literal42);
1387 adaptor.addChild(root_0, char_literal42_tree);
1388
1389 STRING43=(Token)match(input,STRING,FOLLOW_STRING_in_simpleid435);
1390 STRING43_tree = (Object)adaptor.create(STRING43);
1391 adaptor.addChild(root_0, STRING43_tree);
1392
1393 char_literal44=(Token)match(input,27,FOLLOW_27_in_simpleid437);
1394 char_literal44_tree = (Object)adaptor.create(char_literal44);
1395 adaptor.addChild(root_0, char_literal44_tree);
1396
1397 }
1398 break;
1399
1400 }
1401 retval.stop = input.LT(-1);
1402
1403 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
1404 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
1405
1406 }
1407 catch (RecognitionException re) {
1408 reportError(re);
1409 recover(input,re);
1410 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
1411 }
1412 finally {
1413 // do for sure before leaving
1414 }
1415 return retval;
1416 }
1417 // $ANTLR end "simpleid"
1418
1419
1420 public static class variable_return extends ParserRuleReturnScope {
1421 Object tree;
1422 @Override
1423 public Object getTree() { return tree; }
1424 };
1425
1426
1427 // $ANTLR start "variable"
1428 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:133:1: variable : ( '?' ) id -> ^( id ) ;
1429 public final ConjunctiveQueryParser.variable_return variable() throws RecognitionException {
1430 ConjunctiveQueryParser.variable_return retval = new ConjunctiveQueryParser.variable_return();
1431 retval.start = input.LT(1);
1432
1433 Object root_0 = null;
1434
1435 Token char_literal45=null;
1436 ParserRuleReturnScope id46 =null;
1437
1438 Object char_literal45_tree=null;
1439 RewriteRuleTokenStream stream_28=new RewriteRuleTokenStream(adaptor,"token 28");
1440 RewriteRuleSubtreeStream stream_id=new RewriteRuleSubtreeStream(adaptor,"rule id");
1441
1442 try {
1443 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:133:9: ( ( '?' ) id -> ^( id ) )
1444 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:134:3: ( '?' ) id
1445 {
1446 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:134:3: ( '?' )
1447 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:134:4: '?'
1448 {
1449 char_literal45=(Token)match(input,28,FOLLOW_28_in_variable448);
1450 stream_28.add(char_literal45);
1451
1452 }
1453
1454 pushFollow(FOLLOW_id_in_variable451);
1455 id46=id();
1456 state._fsp--;
1457
1458 stream_id.add(id46.getTree());
1459 // AST REWRITE
1460 // elements: id
1461 // token labels:
1462 // rule labels: retval
1463 // token list labels:
1464 // rule list labels:
1465 // wildcard labels:
1466 retval.tree = root_0;
1467 RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
1468
1469 root_0 = (Object)adaptor.nil();
1470 // 134:12: -> ^( id )
1471 {
1472 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:134:15: ^( id )
1473 {
1474 Object root_1 = (Object)adaptor.nil();
1475 root_1 = (Object)adaptor.becomeRoot(stream_id.nextNode(), root_1);
1476 adaptor.addChild(root_0, root_1);
1477 }
1478
1479 }
1480
1481
1482 retval.tree = root_0;
1483
1484 }
1485
1486 retval.stop = input.LT(-1);
1487
1488 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
1489 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
1490
1491 }
1492 catch (RecognitionException re) {
1493 reportError(re);
1494 recover(input,re);
1495 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
1496 }
1497 finally {
1498 // do for sure before leaving
1499 }
1500 return retval;
1501 }
1502 // $ANTLR end "variable"
1503
1504
1505 public static class url_return extends ParserRuleReturnScope {
1506 Object tree;
1507 @Override
1508 public Object getTree() { return tree; }
1509 };
1510
1511
1512 // $ANTLR start "url"
1513 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:136:2: url : ( URLSTRING ) ;
1514 public final ConjunctiveQueryParser.url_return url() throws RecognitionException {
1515 ConjunctiveQueryParser.url_return retval = new ConjunctiveQueryParser.url_return();
1516 retval.start = input.LT(1);
1517
1518 Object root_0 = null;
1519
1520 Token URLSTRING47=null;
1521
1522 Object URLSTRING47_tree=null;
1523
1524 try {
1525 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:136:6: ( ( URLSTRING ) )
1526 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:136:8: ( URLSTRING )
1527 {
1528 root_0 = (Object)adaptor.nil();
1529
1530
1531 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:136:8: ( URLSTRING )
1532 // /home/yzhou/workspace/KARMA/src/org/semanticweb/karma2/model/cqparser/ConjunctiveQuery.g:136:9: URLSTRING
1533 {
1534 URLSTRING47=(Token)match(input,URLSTRING,FOLLOW_URLSTRING_in_url469);
1535 URLSTRING47_tree = (Object)adaptor.create(URLSTRING47);
1536 adaptor.addChild(root_0, URLSTRING47_tree);
1537
1538 }
1539
1540 }
1541
1542 retval.stop = input.LT(-1);
1543
1544 retval.tree = (Object)adaptor.rulePostProcessing(root_0);
1545 adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
1546
1547 }
1548 catch (RecognitionException re) {
1549 reportError(re);
1550 recover(input,re);
1551 retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
1552 }
1553 finally {
1554 // do for sure before leaving
1555 }
1556 return retval;
1557 }
1558 // $ANTLR end "url"
1559
1560 // Delegated rules
1561
1562
1563
1564 public static final BitSet FOLLOW_prefixlist_in_cq132 = new BitSet(new long[]{0x0000000000008000L});
1565 public static final BitSet FOLLOW_rulebody_in_cq134 = new BitSet(new long[]{0x0000000000000002L});
1566 public static final BitSet FOLLOW_prefix_in_prefixlist154 = new BitSet(new long[]{0x0000000000400002L});
1567 public static final BitSet FOLLOW_22_in_prefixlist157 = new BitSet(new long[]{0x0000000020000000L});
1568 public static final BitSet FOLLOW_prefix_in_prefixlist159 = new BitSet(new long[]{0x0000000000400002L});
1569 public static final BitSet FOLLOW_29_in_prefix181 = new BitSet(new long[]{0x0000000000008000L});
1570 public static final BitSet FOLLOW_id_in_prefix183 = new BitSet(new long[]{0x0000000001000000L});
1571 public static final BitSet FOLLOW_24_in_prefix185 = new BitSet(new long[]{0x0000000002000000L});
1572 public static final BitSet FOLLOW_25_in_prefix187 = new BitSet(new long[]{0x0000000000020000L});
1573 public static final BitSet FOLLOW_url_in_prefix189 = new BitSet(new long[]{0x0000000008000000L});
1574 public static final BitSet FOLLOW_27_in_prefix191 = new BitSet(new long[]{0x0000000000000002L});
1575 public static final BitSet FOLLOW_headatom_in_rulebody213 = new BitSet(new long[]{0x0000000005000000L});
1576 public static final BitSet FOLLOW_26_in_rulebody216 = new BitSet(new long[]{0x0000000000008000L});
1577 public static final BitSet FOLLOW_24_in_rulebody218 = new BitSet(new long[]{0x0000000000008000L});
1578 public static final BitSet FOLLOW_body_in_rulebody221 = new BitSet(new long[]{0x0000000000800002L});
1579 public static final BitSet FOLLOW_23_in_rulebody223 = new BitSet(new long[]{0x0000000000000002L});
1580 public static final BitSet FOLLOW_atom_in_body245 = new BitSet(new long[]{0x0000000000400002L});
1581 public static final BitSet FOLLOW_22_in_body248 = new BitSet(new long[]{0x0000000000008000L});
1582 public static final BitSet FOLLOW_atom_in_body250 = new BitSet(new long[]{0x0000000000400002L});
1583 public static final BitSet FOLLOW_id_in_headatom276 = new BitSet(new long[]{0x0000000000100000L});
1584 public static final BitSet FOLLOW_20_in_headatom278 = new BitSet(new long[]{0x0000000012008000L});
1585 public static final BitSet FOLLOW_term_in_headatom280 = new BitSet(new long[]{0x0000000000600000L});
1586 public static final BitSet FOLLOW_22_in_headatom283 = new BitSet(new long[]{0x0000000012008000L});
1587 public static final BitSet FOLLOW_term_in_headatom285 = new BitSet(new long[]{0x0000000000600000L});
1588 public static final BitSet FOLLOW_21_in_headatom289 = new BitSet(new long[]{0x0000000000000002L});
1589 public static final BitSet FOLLOW_compositeid_in_atom309 = new BitSet(new long[]{0x0000000000100000L});
1590 public static final BitSet FOLLOW_20_in_atom311 = new BitSet(new long[]{0x0000000012008000L});
1591 public static final BitSet FOLLOW_term_in_atom313 = new BitSet(new long[]{0x0000000000600000L});
1592 public static final BitSet FOLLOW_22_in_atom316 = new BitSet(new long[]{0x0000000012008000L});
1593 public static final BitSet FOLLOW_term_in_atom318 = new BitSet(new long[]{0x0000000000600000L});
1594 public static final BitSet FOLLOW_21_in_atom322 = new BitSet(new long[]{0x0000000000000002L});
1595 public static final BitSet FOLLOW_id_in_compositeid342 = new BitSet(new long[]{0x0000000001000000L});
1596 public static final BitSet FOLLOW_24_in_compositeid345 = new BitSet(new long[]{0x0000000000008000L});
1597 public static final BitSet FOLLOW_id_in_compositeid348 = new BitSet(new long[]{0x0000000000000002L});
1598 public static final BitSet FOLLOW_variable_in_term371 = new BitSet(new long[]{0x0000000000000002L});
1599 public static final BitSet FOLLOW_simpleid_in_term386 = new BitSet(new long[]{0x0000000000000002L});
1600 public static final BitSet FOLLOW_compositeid_in_term400 = new BitSet(new long[]{0x0000000000000002L});
1601 public static final BitSet FOLLOW_STRING_in_id417 = new BitSet(new long[]{0x0000000000000002L});
1602 public static final BitSet FOLLOW_25_in_simpleid425 = new BitSet(new long[]{0x0000000000020000L});
1603 public static final BitSet FOLLOW_URLSTRING_in_simpleid427 = new BitSet(new long[]{0x0000000008000000L});
1604 public static final BitSet FOLLOW_27_in_simpleid429 = new BitSet(new long[]{0x0000000000000002L});
1605 public static final BitSet FOLLOW_25_in_simpleid433 = new BitSet(new long[]{0x0000000000008000L});
1606 public static final BitSet FOLLOW_STRING_in_simpleid435 = new BitSet(new long[]{0x0000000008000000L});
1607 public static final BitSet FOLLOW_27_in_simpleid437 = new BitSet(new long[]{0x0000000000000002L});
1608 public static final BitSet FOLLOW_28_in_variable448 = new BitSet(new long[]{0x0000000000008000L});
1609 public static final BitSet FOLLOW_id_in_variable451 = new BitSet(new long[]{0x0000000000000002L});
1610 public static final BitSet FOLLOW_URLSTRING_in_url469 = new BitSet(new long[]{0x0000000000000002L});
1611}
diff --git a/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryWalker.java b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryWalker.java
new file mode 100644
index 0000000..f10b761
--- /dev/null
+++ b/src/main/java/org/semanticweb/karma2/model/cqparser/ConjunctiveQueryWalker.java
@@ -0,0 +1,179 @@
1package org.semanticweb.karma2.model.cqparser;
2
3
4
5import java.util.ArrayList;
6import java.util.Iterator;
7import java.util.List;
8
9import org.antlr.runtime.tree.CommonTree;
10import org.semanticweb.HermiT.model.Atom;
11import org.semanticweb.HermiT.model.AtomicConcept;
12import org.semanticweb.HermiT.model.AtomicRole;
13import org.semanticweb.HermiT.model.Individual;
14import org.semanticweb.HermiT.model.Term;
15import org.semanticweb.HermiT.model.Variable;
16import org.semanticweb.karma2.exception.IllegalInputQueryException;
17import org.semanticweb.karma2.model.ConjunctiveQuery;
18
19import uk.ac.ox.cs.JRDFox.Prefixes;
20import uk.ac.ox.cs.pagoda.util.Utility;
21
22
23
24
25public class ConjunctiveQueryWalker {
26
27
28 public ConjunctiveQueryWalker() {
29
30 }
31
32 @SuppressWarnings("unchecked")
33 private List<CommonTree> childrenOf(CommonTree node) {
34 return (List<CommonTree>) node.getChildren();
35 }
36
37
38 private boolean isSafe(Term[] headTerms, Atom[] atoms) {
39 for (Term t : headTerms) {
40 if (t instanceof Variable) {
41 boolean res = false;
42 for (Atom a : atoms) {
43 if (a.getArity()==1) {
44 if (a.getArgument(0).equals(t))
45 res = true;
46 }
47 if (a.getArity()==2) {
48 if (a.getArgument(0).equals(t) || a.getArgument(1).equals(t))
49 res = true;
50 }
51 }
52 if(!res)
53 return false;
54 }
55 }
56 return true;
57 }
58
59
60 public ConjunctiveQuery walkExpressionNode(CommonTree ruleNode) throws IllegalInputQueryException {
61
62 assert (ruleNode.getType() == ConjunctiveQueryLexer.EXPRESSION);
63
64 Iterator<CommonTree> iterator = childrenOf(ruleNode).iterator();
65
66 CommonTree prefixList = iterator.next();
67 assert (prefixList.getType() == ConjunctiveQueryLexer.PREFIX_LIST);
68 Prefixes prefixes = walkPrefixList(prefixList);
69 CommonTree rulebody = iterator.next();
70 assert (rulebody.getType() == ConjunctiveQueryLexer.RULE);
71 return walkRuleNode(rulebody, prefixes);
72
73 }
74
75 public Prefixes walkPrefixList(CommonTree prefixlist) throws IllegalInputQueryException {
76 assert (prefixlist.getType() == ConjunctiveQueryLexer.PREFIX_LIST);
77 Prefixes pref = new Prefixes();
78 for (CommonTree prefixNode : childrenOf(prefixlist)) {
79 walkPrefixNode(prefixNode, pref);
80 }
81 return pref;
82
83 }
84
85 private void walkPrefixNode(CommonTree prefixNode, Prefixes pref) throws IllegalInputQueryException {
86 Iterator<CommonTree> iterator = childrenOf(prefixNode).iterator();
87 CommonTree shortID = iterator.next();
88 CommonTree longID = iterator.next();
89 pref.declarePrefix(shortID.getText() + ":", longID.getText());
90 }
91
92
93 public ConjunctiveQuery walkRuleNode(CommonTree ruleNode, Prefixes prefixes) throws IllegalInputQueryException {
94
95 assert (ruleNode.getType() == ConjunctiveQueryLexer.RULE);
96
97 Iterator<CommonTree> iterator = childrenOf(ruleNode).iterator();
98
99 CommonTree headNode = iterator.next();
100 assert (headNode.getType() == ConjunctiveQueryLexer.HEADATOM);
101 Term[] headTerms = walkHeadAtomNode(headNode);
102 Atom[] atoms = walkAtomList(iterator.next());
103 if (!isSafe(headTerms, atoms))
104 throw new IllegalInputQueryException("query is not safe");
105 return new ConjunctiveQuery(atoms, headTerms, prefixes);
106
107 }
108
109 private Term[] walkHeadAtomNode(CommonTree node) throws IllegalInputQueryException {
110 List<Term> terms = new ArrayList<Term>();
111 for (CommonTree termNode : childrenOf(node)) {
112 terms.add(walkTermNode(termNode));
113 }
114 return terms.toArray(new Term[terms.size()]);
115 }
116
117
118 private String walkCompositeId(CommonTree compositeID) {
119 Iterator<CommonTree> iterator = childrenOf(compositeID).iterator();
120 return iterator.next().getText() + ":" + iterator.next().getText() ;
121 }
122
123 private String walkSimpleId(CommonTree termNode) {
124 Iterator<CommonTree> it = childrenOf(termNode).iterator();
125 it.next();
126 CommonTree t = it.next();
127 return t.getText();
128 }
129
130 private Term walkTermNode(CommonTree termNode) throws IllegalInputQueryException {
131 if (termNode.getType() == ConjunctiveQueryLexer.VARIABLE) {
132 return Variable.create("?" + childrenOf(termNode).iterator().next().getText());
133 }
134 if (termNode.getType() == ConjunctiveQueryLexer.CONSTANT) {
135 Individual newind = Individual.create(walkCompositeId(childrenOf(termNode).iterator().next()));
136 Utility.logError(newind);
137 return newind;
138 }
139 if (termNode.getType() == ConjunctiveQueryLexer.SCONSTANT) {
140 Individual newind = Individual.create(walkSimpleId(termNode));
141 return newind;
142 }
143 throw new IllegalArgumentException();
144 }
145
146
147
148 public Atom[] walkAtomList(CommonTree node) throws IllegalInputQueryException {
149 assert (node.getType() == ConjunctiveQueryLexer.ATOM_LIST);
150 List<Atom> atoms = new ArrayList<Atom>();
151 for (CommonTree atomNode : childrenOf(node)) {
152 atoms.add(walkAtomNode(atomNode));
153 }
154 return atoms.toArray(new Atom[atoms.size()]);
155
156 }
157
158 private Atom walkAtomNode(CommonTree atomNode) throws IllegalInputQueryException {
159 assert (atomNode.getType() == ConjunctiveQueryLexer.ATOM);
160 Iterator<CommonTree> iterator = childrenOf(atomNode).iterator();
161 CommonTree id = iterator.next();
162 String predicatename = walkCompositeId(id);
163 List<Term> listofterms = new ArrayList<Term>();
164 while (iterator.hasNext()){
165 listofterms.add(walkTermNode(iterator.next()));
166 }
167 if(listofterms.isEmpty() || (listofterms.size()>2))
168 throw new IllegalInputQueryException("Problem parsing terms in the query");
169 Term[] terms = listofterms.toArray(new Term[listofterms.size()]);
170 if (terms.length == 1)
171 return Atom.create(AtomicConcept.create(predicatename), terms);
172 if (terms.length == 2)
173 return Atom.create(AtomicRole.create(predicatename), terms);
174 throw new IllegalInputQueryException("Problem parsing terms in the query");
175 }
176
177
178}
179