JODA  0.13.1 (59b41972)
JSON On-Demand Analysis
Literals.h
Go to the documentation of this file.
1 //
2 // Created by Nico on 21/02/2019.
3 //
4 
5 #ifndef JODA_LITERALS_H
6 #define JODA_LITERALS_H
7 
8 #include "../../../../../../../extern/PEGTL/include/tao/pegtl.hpp"
9 #include "../FunctionWrapper.h"
10 
12 
13 /*
14  * JSON Pointer
15  */
17  : tao::pegtl::seq<
18  tao::pegtl::one<'~'>,
19  tao::pegtl::sor<tao::pegtl::one<'0'>, tao::pegtl::one<'1'>>> {};
20 struct unescapedToken : tao::pegtl::utf8::not_one<'\x2F', '\x7E', '\''> {};
22  : tao::pegtl::star<tao::pegtl::sor<unescapedToken, escapedToken>> {};
23 struct pointer
24  : tao::pegtl::seq<tao::pegtl::one<'\''>,
25  tao::pegtl::star<tao::pegtl::seq<tao::pegtl::one<'/'>,
26  referenceToken>>,
27  tao::pegtl::one<'\''>> {};
28 
29 // Functions
30 struct funcPtr : pointer {};
31 
32 /*
33  * Number
34  */
36  : tao::pegtl::seq<tao::pegtl::opt<tao::pegtl::one<'+', '-'>>,
37  tao::pegtl::plus<tao::pegtl::digit>, tao::pegtl::one<'.'>,
38  tao::pegtl::plus<tao::pegtl::digit>> {};
39 
40 struct intNumber : tao::pegtl::seq<tao::pegtl::opt<tao::pegtl::one<'+', '-'>>,
41  tao::pegtl::plus<tao::pegtl::digit>> {};
42 
43 struct numberAtom : tao::pegtl::sor<floatNumber, intNumber> {};
44 
45 /*
46  * String
47  */
49  : tao::pegtl::seq<tao::pegtl::utf8::one<'\\'>,
50  tao::pegtl::sor<tao::pegtl::utf8::one<'"'>,
51  tao::pegtl::utf8::one<'\\'>>> {};
52 struct unescapedChar : tao::pegtl::utf8::not_one<'\\', '"'> {};
53 struct stringAtom
54  : tao::pegtl::seq<
55  tao::pegtl::one<'"'>,
56  tao::pegtl::star<tao::pegtl::sor<escapedChar, unescapedChar>>,
57  tao::pegtl::one<'"'>> {};
58 
59 /*
60  * Bool
61  */
62 
63 #ifndef __CLION_IDE__ // Prevent lag from expanding all macros
64 struct boolAtom : tao::pegtl::sor<TAOCPP_PEGTL_KEYWORD("true"),
65  TAOCPP_PEGTL_KEYWORD("false")> {};
66 #endif
67 
68 /*
69  * Null
70  */
71 
72 #ifndef __CLION_IDE__ // Prevent lag from expanding all macros
73 struct nullAtom : tao::pegtl::sor<TAOCPP_PEGTL_KEYWORD("null"),
74  TAOCPP_PEGTL_KEYWORD("NULL")> {};
75 #endif
76 
77 /*
78  * Expression
79  */
80 
81 struct funcBracketOpen : tao::pegtl::one<'('> {};
82 struct funcBracketClose : tao::pegtl::one<')'> {};
83 
84 struct gt : tao::pegtl::seq<tao::pegtl::one<'>'>,
85  tao::pegtl::opt<tao::pegtl::one<'='>>> {};
86 struct lt : tao::pegtl::seq<tao::pegtl::one<'<'>,
87  tao::pegtl::opt<tao::pegtl::one<'='>>> {};
88 struct equal : tao::pegtl::seq<
89  tao::pegtl::sor<tao::pegtl::one<'!'>, tao::pegtl::one<'='>>,
90  tao::pegtl::one<'='>> {};
91 struct compare : tao::pegtl::sor<gt, lt, equal> {};
93  : tao::pegtl::sor<numberAtom, stringAtom, boolAtom, nullAtom> {};
94 struct beginList : tao::pegtl::one<'['> {};
95 // struct numList : tao::pegtl::seq<beginList,
96 // tao::pegtl::opt<tao::pegtl::list<tao::pegtl::listContent,
97 // tao::pegtl::one<','>, tao::pegtl::space>>, tao::pegtl::one<']'>> {};
98 struct varExp
99  : tao::pegtl::sor<numberAtom, stringAtom, boolAtom, nullAtom, pointer> {};
100 struct functionstateaction;
102  : tao::pegtl::sor<numberAtom, stringAtom, pointer, boolAtom, nullAtom,
103  /*numList,*/ functionstateaction> {};
104 struct realFunc
105  : tao::pegtl::seq<
106  functionKWs, tao::pegtl::must<funcBracketOpen>,
107  tao::pegtl::opt<tao::pegtl::list<funcParamRule, tao::pegtl::one<','>,
108  tao::pegtl::space>>,
109  tao::pegtl::must<funcBracketClose>> {};
110 struct atomFunc : varExp {};
111 struct ptrFunc : tao::pegtl::sor<varExp, realFunc> {};
113  : tao::pegtl::state<functionState,
114  tao::pegtl::action<functionAction, ptrFunc>> {};
115 
117  : tao::pegtl::seq<
118  tao::pegtl::must<
119  tao::pegtl::pad<functionstateaction, tao::pegtl::space>>,
120  tao::pegtl::opt<tao::pegtl::pad<compare, tao::pegtl::space>,
121  tao::pegtl::pad<tao::pegtl::must<functionstateaction>,
122  tao::pegtl::space>>> {};
123 
124 struct orExp;
125 struct negate : tao::pegtl::one<'!'> {};
126 struct bracketStart : tao::pegtl::pad<tao::pegtl::one<'('>, tao::pegtl::space> {
127 };
128 struct bracketEnd : tao::pegtl::pad<tao::pegtl::one<')'>, tao::pegtl::space> {};
129 struct atomExp
130  : tao::pegtl::sor<tao::pegtl::seq<bracketStart,
131  tao::pegtl::pad<orExp, tao::pegtl::space>,
132  bracketEnd>,
133  compareExp> {};
134 struct unaryExp
135  : tao::pegtl::seq<tao::pegtl::pad_opt<negate, tao::pegtl::space>, atomExp> {
136 };
137 struct andStart : tao::pegtl::star<tao::pegtl::space> {};
138 struct andSymbol : tao::pegtl::seq<tao::pegtl::one<'&'>, tao::pegtl::one<'&'>> {
139 };
140 struct andExp
141  : tao::pegtl::seq<andStart, tao::pegtl::list_must<unaryExp, andSymbol,
142  tao::pegtl::space>> {};
143 struct orSymbol : tao::pegtl::seq<tao::pegtl::one<'|'>, tao::pegtl::one<'|'>> {
144 };
145 struct orStart : tao::pegtl::star<tao::pegtl::space> {};
146 struct orExp
147  : tao::pegtl::seq<
148  orStart, tao::pegtl::list_must<andExp, orSymbol, tao::pegtl::space>> {
149 };
150 struct expStart : tao::pegtl::star<tao::pegtl::space> {};
151 struct qexp : tao::pegtl::seq<expStart, orExp> {};
152 
153 /*
154  * Group Expression
155  */
156 struct groupPointer : pointer {};
158 struct groupIdent : tao::pegtl::sor<groupPointer, groupFunction> {};
159 
160 } // namespace joda::queryparsing::grammar
161 
162 #endif // JODA_LITERALS_H
Definition: Literals.h:142
Definition: Literals.h:137
Definition: Literals.h:138
Definition: Literals.h:133
Definition: Literals.h:110
Definition: Literals.h:65
Definition: Literals.h:128
Definition: Literals.h:122
Definition: Literals.h:91
Definition: Literals.h:90
Definition: Literals.h:150
Definition: Literals.h:30
Definition: Literals.h:158
Definition: Literals.h:85
Definition: Literals.h:87
Definition: Literals.h:125
Definition: Literals.h:74
Definition: Literals.h:148
Definition: Literals.h:145
Definition: Literals.h:143
Definition: Literals.h:27
Definition: Literals.h:111
Definition: Literals.h:151
Definition: Literals.h:109
Definition: Literals.h:135
Definition: Literals.h:99