JODA  0.13.1 (59b41972)
JSON On-Demand Analysis
Load.h
Go to the documentation of this file.
1 //
2 // Created by Nico on 21/02/2019.
3 //
4 
5 #ifndef JODA_LOADSTATEMENT_H
6 #define JODA_LOADSTATEMENT_H
7 
8 #include "../../../../../../../extern/PEGTL/include/tao/pegtl.hpp"
9 
11 /*
12  * Forward Declaration Actions
13  */
14 template <typename Rule>
15 struct loadAction : tao::pegtl::nothing<Rule> {};
16 
17 /*
18  * Keywords
19  */
20 #ifndef __CLION_IDE__ // Prevent lag from expanding all macros
21 struct loadKW : TAOCPP_PEGTL_KEYWORD("LOAD") {};
22 struct fromFileKW : TAOCPP_PEGTL_KEYWORD("FROM FILE") {};
23 struct fromFilesKW : TAOCPP_PEGTL_KEYWORD("FROM FILES") {};
24 struct fromGroupedKW : TAOCPP_PEGTL_KEYWORD("FROM GROUPED") {};
25 struct fromURLKW : TAOCPP_PEGTL_KEYWORD("FROM URL") {};
26 struct sampleKW : TAOCPP_PEGTL_KEYWORD("SAMPLE") {};
27 struct lineSeperatedKW : TAOCPP_PEGTL_KEYWORD("LINESEPARATED") {};
28 #endif
29 } // namespace joda::queryparsing::grammar
30 #include "Literals.h"
32 struct loadFileName : tao::pegtl::plus<tao::pegtl::not_one<'"'>> {};
33 struct loadIdent : tao::pegtl::identifier {};
34 struct sampleNum : tao::pegtl::seq<tao::pegtl::one<'0'>, tao::pegtl::one<'.'>,
35  tao::pegtl::plus<tao::pegtl::digit>> {};
36 
38  : tao::pegtl::pad<
39  tao::pegtl::seq<sampleKW, tao::pegtl::pad<tao::pegtl::must<sampleNum>,
40  tao::pegtl::space>>,
41  tao::pegtl::space> {};
42 
43 struct loadFilesKWs : tao::pegtl::sor<fromFilesKW, fromFileKW, fromURLKW> {};
44 
45 struct loadFileLiteralStart : tao::pegtl::one<'"'> {};
46 struct loadFileLiteralEnd : tao::pegtl::one<'"'> {};
48  : tao::pegtl::seq<tao::pegtl::must<loadFileLiteralStart>,
49  tao::pegtl::must<loadFileName>,
50  tao::pegtl::must<loadFileLiteralEnd>> {};
52  : tao::pegtl::seq<tao::pegtl::pad<loadFilesKWs, tao::pegtl::space>,
53  tao::pegtl::pad<tao::pegtl::must<loadFilesliteral>,
54  tao::pegtl::space>> {};
55 
57  : tao::pegtl::pad<lineSeperatedKW, tao::pegtl::space> {};
58 
60  : tao::pegtl::seq<loadFilesCommand,
61  tao::pegtl::opt<loadFilesLineSeperatedCommand>,
62  tao::pegtl::opt<sampleCommand>> {};
63 
65  : tao::pegtl::seq<
66  tao::pegtl::pad<fromGroupedKW, tao::pegtl::space>,
67  tao::pegtl::pad<tao::pegtl::must<groupIdent>, tao::pegtl::space>> {};
68 
70  : tao::pegtl::sor<loadAndSampleCommand, loadGroupedCommand> {
71 }; // FROM ....
72 // FROM ..., FROM ..., ...
74  : tao::pegtl::seq<
75  loadImportSource,
76  tao::pegtl::opt<tao::pegtl::seq<
77  tao::pegtl::pad<tao::pegtl::one<','>, tao::pegtl::space>,
78  loadImportSources>>> {};
79 
81  : tao::pegtl::seq<
82  tao::pegtl::pad<tao::pegtl::must<loadKW>, tao::pegtl::space>,
83  tao::pegtl::pad<tao::pegtl::must<loadIdent>, tao::pegtl::space>,
84  tao::pegtl::opt<loadImportSources>> {};
85 
86 } // namespace joda::queryparsing::grammar
87 #endif // JODA_LOADSTATEMENT_H