aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ast.cc4
-rw-r--r--include/parser/token.h26
2 files changed, 27 insertions, 3 deletions
diff --git a/ast.cc b/ast.cc
index 66bd451..4bd9e6b 100644
--- a/ast.cc
+++ b/ast.cc
@@ -64,11 +64,11 @@ int main()
else if (c.token_type == RIGHT_BRACKET)
println("{} RIGHT_BRACKET", c.bracket_depth);
else if (c.token_type == TEXT)
- println("{} TEXT {}", c.bracket_depth, c.text);
+ println("{} TEXT .{}.", c.bracket_depth, c.text);
}
cout << "---------- parse ----------" << endl;
- parse(0, token.size(), alloc_ast());
+ //parse(0, token.size(), alloc_ast());
return 0;
}
diff --git a/include/parser/token.h b/include/parser/token.h
index 1896b3f..5b65d67 100644
--- a/include/parser/token.h
+++ b/include/parser/token.h
@@ -21,6 +21,27 @@ public:
int bracket_depth = 0;
};
+size_t find_non_space_previous(string s, size_t i)
+{
+ size_t len = s.size(), backup = i;
+ i--; // skip current char
+ for ( ; i < len; i--)
+ if (s[i] != ' ')
+ return i+1; // because region is [x, y)
+
+ return backup;
+}
+
+string trim_space(const string &s)
+{
+ size_t b = s.find_first_not_of(" \t");
+ if (b == string::npos)
+ return "";
+ size_t e = s.find_last_not_of(" \t");
+ return s.substr(b, e - b + 1);
+}
+
+
bool is_symbol(char c)
{
if (c == '&' || c == '|' || c == '(' || c == ')')
@@ -104,8 +125,11 @@ void token_push(string s, size_t current, size_t prev, int bracket_depth, bool i
return;
}
+ string trimed = trim_space(sub);
+ if (trimed == "") return;
+
tmp.token_type = TEXT;
- tmp.text = sub;
+ tmp.text = trimed;
token.push_back(tmp);
}