aboutsummaryrefslogtreecommitdiff
path: root/src/MoonP/parser.hpp
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2020-01-30 16:06:32 +0800
committerLi Jin <dragon-fly@qq.com>2020-01-30 16:06:32 +0800
commitc62d9eb35a310e7663234526ce4b9fe3519ca7cf (patch)
tree56b4b418aadab90989e3e29e29e8ab7e04806e8d /src/MoonP/parser.hpp
parent240b1ec4a49128c00a787e6d0928865995b1d02e (diff)
downloadyuescript-c62d9eb35a310e7663234526ce4b9fe3519ca7cf.tar.gz
yuescript-c62d9eb35a310e7663234526ce4b9fe3519ca7cf.tar.bz2
yuescript-c62d9eb35a310e7663234526ce4b9fe3519ca7cf.zip
Separate MoonParser from MoonCompiler, make moonc compile multiple file in threads.
Diffstat (limited to 'src/MoonP/parser.hpp')
-rw-r--r--src/MoonP/parser.hpp22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/MoonP/parser.hpp b/src/MoonP/parser.hpp
index 9739465..b419e8c 100644
--- a/src/MoonP/parser.hpp
+++ b/src/MoonP/parser.hpp
@@ -28,16 +28,13 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
28namespace parserlib { 28namespace parserlib {
29 29
30// const str hash helper functions 30// const str hash helper functions
31inline constexpr size_t hash(char const* input) 31inline constexpr size_t hash(char const* input) {
32{
33 return *input ? *input + 33ull * hash(input + 1) : 5381; 32 return *input ? *input + 33ull * hash(input + 1) : 5381;
34} 33}
35inline size_t hash(const char* input, int size, int index) 34inline size_t hash(const char* input, int size, int index) {
36{
37 return index < size ? input[index] + 33ull * hash(input, size, index + 1) : 5381; 35 return index < size ? input[index] + 33ull * hash(input, size, index + 1) : 5381;
38} 36}
39inline size_t constexpr operator"" _id(const char* s, size_t) 37inline size_t constexpr operator"" _id(const char* s, size_t) {
40{
41 return hash(s); 38 return hash(s);
42} 39}
43 40
@@ -52,8 +49,7 @@ class _context;
52class rule; 49class rule;
53 50
54 51
55struct item_t 52struct item_t {
56{
57 input_it begin; 53 input_it begin;
58 input_it end; 54 input_it end;
59 void* user_data; 55 void* user_data;
@@ -74,7 +70,7 @@ public:
74 int m_col; 70 int m_col;
75 71
76 ///null constructor. 72 ///null constructor.
77 pos():m_line(-1),m_col(0) {} 73 pos():m_line(0),m_col(0) {}
78 74
79 /** constructor from input. 75 /** constructor from input.
80 @param i input. 76 @param i input.
@@ -216,6 +212,7 @@ public:
216 /** character terminal constructor. 212 /** character terminal constructor.
217 @param c character. 213 @param c character.
218 */ 214 */
215 rule();
219 rule(char c); 216 rule(char c);
220 217
221 /** null-terminated string terminal constructor. 218 /** null-terminated string terminal constructor.
@@ -278,6 +275,10 @@ public:
278 */ 275 */
279 rule *this_ptr() { return this; } 276 rule *this_ptr() { return this; }
280 277
278 rule &operator = (rule &);
279
280 rule &operator = (const expr &);
281
281private: 282private:
282 //mode 283 //mode
283 enum _MODE { 284 enum _MODE {
@@ -308,9 +309,6 @@ private:
308 //state 309 //state
309 _state m_state; 310 _state m_state;
310 311
311 //assignment not allowed
312 rule &operator = (rule &);
313
314 friend class _private; 312 friend class _private;
315 friend class _context; 313 friend class _context;
316}; 314};