GLIP-Lib
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
VanillaParser.hpp
Go to the documentation of this file.
1 /* ************************************************************************************************************* */
2 /* */
3 /* GLIP-LIB */
4 /* OpenGL Image Processing LIBrary */
5 /* */
6 /* Author : R. Kerviche */
7 /* LICENSE : MIT License */
8 /* Website : glip-lib.net */
9 /* */
10 /* File : VanillaParser.hpp */
11 /* Original Date : June 8th 2013 */
12 /* */
13 /* Description : Small file parser. */
14 /* */
15 /* ************************************************************************************************************* */
16 
24 #ifndef __VANILLA_PARSER_INCLUDE__
25 #define __VANILLA_PARSER_INCLUDE__
26 
27  // Includes
28  #include <string>
29  #include <vector>
30  #include "Core/LibTools.hpp"
31 
32 namespace Glip
33 {
34  namespace Modules
35  {
36  namespace VanillaParserSpace
37  {
38  /*
39  Script general specification :
40 
41  // Comment (or on multiple lines, C/C++ style).
42  KEYWORD:NAME(arg1, arg2, ..., argN)
43  {
44  BODY
45  }
46  */
47 
48  // Layout
49  struct GLIP_API Element
50  {
51  enum Field
52  {
53  Keyword,
54  Name,
55  Arguments,
56  AfterArguments,
57  Body,
58  NumField,
59  Unknown
60  };
61 
62 
63  std::string sourceName,
64  strKeyword,
65  name,
66  body;
67  std::vector<std::string> arguments;
68  bool noName, // Missing ':'
69  noArgument, // Missing '(' to ')'
70  noBody; // Missing '{' to '}'
71  int startLine,
72  bodyLine;
73 
74  Element(void);
75  Element(const Element& cpy);
76  const Element& operator=(const Element& cpy);
77  void clear(void);
78  bool empty(void) const;
79  std::string getCleanBody(void) const;
80  std::string getCode(void) const;
81  };
82 
83  // Parser Class :
84  class GLIP_API VanillaParser
85  {
86  private :
87  std::string sourceName;
88 
89  bool compare(const std::string& code, int& k, const std::string token);
90  void testAndSaveCurrentElement(Element::Field& current, const Element::Field& next, Element& el);
91  void record(Element& el, const Element::Field& field, char c, int currentLine);
92 
93  public :
94  std::vector<Element> elements;
95 
96  VanillaParser(const std::string& code, const std::string& _sourceName="", int startLine=1);
97  const std::string& getSourceName(void) const;
98  VanillaParser& operator<<(const VanillaParser& subParser);
99  };
100  }
101  }
102 }
103 
104 #endif
105 
Specific defines for the API structure.
Definition: Component.hpp:32