Merge "BUG-2329 Add test for anyxmls inside rpc resonse for netcfon-connector"
[controller.git] / opendaylight / adsal / northbound / commons / src / main / javacc / fiql.jj
1
2 options {
3   STATIC = false;
4 }
5
6 PARSER_BEGIN(FiqlParser)
7 package org.opendaylight.controller.northbound.commons.query;
8
9 import java.util.regex.*;
10
11 /*package*/ class FiqlParser {
12   public static Expression parse(String query) throws ParseException {
13     FiqlParser parser = new FiqlParser(new java.io.StringReader(query));
14     return parser.START();
15   }
16 }
17
18 PARSER_END(FiqlParser)
19
20 /* whitespace */
21 SKIP :
22 {
23   " " | "\t"
24 }
25
26 TOKEN : {
27   <#ALPHA  : ( ["a"-"z", "A"-"Z", "0"-"9"] )+ >
28 }
29
30 TOKEN : {
31   <NUM     : ("+"|"-")?(["0"-"9"])+"."(["0"-"9"])* >
32   |
33   <LPAREN  : "(" >
34   |
35   <RPAREN  : ")" >
36 }
37
38 /* comparision ops */
39 TOKEN : {
40   <RE      : ("=") >
41   |
42   <EQ      : ("==" | "=eq=") >
43   |
44   <NE      : ("!=" | "=ne=") >
45   |
46   <LT      : ("=lt=" | "<") >
47   |
48   <LE      : ("=le=" | "<=") >
49   |
50   <GT      : ("=gt=" | ">") >
51   |
52   <GE      : ("=ge=" | ">=") >
53 }
54
55 /* ops */
56 TOKEN : {
57   <AND     : (";" | "and") >
58   |
59   <OR      : ("," | "or") >
60 }
61
62 /* strings */
63 TOKEN : {
64   <STRING : ( ~["\"", "'", "(", ")", ";", ",", "=", "<", ">", "!", "~", " "] )+ >
65   |
66   <DQ_STRING : ( "\"" ( ~["\""] )* "\"" ) >
67   |
68   <SQ_STRING : ( "'" ( ~["'"] )* "'" ) >
69 }
70
71 /* Root production */
72 Expression START() :
73 {
74   Expression e;
75 }
76 {
77   e = EXPR()
78   <EOF>
79   {
80     return e;
81   }
82 }
83
84 Expression EXPR():
85 {
86   ExpressionBuilder builder = new ExpressionBuilder();
87   Expression t;
88 }
89 {
90   t = TERM() { builder.withTerm(t); }
91   (
92     (<AND> t = TERM()) { builder.withAnd().withTerm(t); }
93     |
94     (<OR> t = TERM() ) { builder.withOr().withTerm(t); }
95   )*
96   {
97     return builder.build();
98   }
99 }
100
101 Expression TERM() :
102 {
103   Token selector, arg;
104   Expression exp;
105   CompareExpression.OP op;
106 }
107 {
108   selector = <STRING>
109   (
110     ( <EQ>  {op=CompareExpression.OP.EQ;} |
111       <RE>  {op=CompareExpression.OP.RE;} |
112       <NE>  {op=CompareExpression.OP.NE;} |
113       <LT>  {op=CompareExpression.OP.LT;} |
114       <LE>  {op=CompareExpression.OP.LE;} |
115       <GT>  {op=CompareExpression.OP.GT;} |
116       <GE>  {op=CompareExpression.OP.GE;}
117     )
118     ( arg = <STRING> | arg = <DQ_STRING> | arg = <SQ_STRING> | arg = <NUM>)
119   ) { return new CompareExpression(op, selector.image, arg.image); }
120   |
121   (
122     <LPAREN> exp = EXPR() <RPAREN>
123   ) { return exp; }
124 }