Add script to trim whitespace

This commit is contained in:
Max Brunsfeld 2014-03-09 19:49:35 -07:00
parent e681a63552
commit 39aa0ccc91
66 changed files with 350 additions and 347 deletions

View file

@ -12,14 +12,14 @@ namespace tree_sitter {
using std::hash;
using std::make_shared;
using std::set;
class PatternParser {
public:
PatternParser(const string &input) :
input(input),
length(input.length()),
position(0) {}
rule_ptr rule() {
auto result = term();
while (has_more_input() && peek() == '|') {
@ -28,7 +28,7 @@ namespace tree_sitter {
}
return result;
}
private:
rule_ptr term() {
rule_ptr result = factor();
@ -36,7 +36,7 @@ namespace tree_sitter {
result = Seq::Build({ result, factor() });
return result;
}
rule_ptr factor() {
rule_ptr result = atom();
if (has_more_input() && (peek() == '+')) {
@ -45,7 +45,7 @@ namespace tree_sitter {
}
return result;
}
rule_ptr atom() {
rule_ptr result;
switch (peek()) {
@ -77,7 +77,7 @@ namespace tree_sitter {
}
return result;
}
CharacterSet char_set() {
bool is_affirmative = true;
if (peek() == '^') {
@ -89,7 +89,7 @@ namespace tree_sitter {
result.add_set(single_char());
return is_affirmative ? result : result.complement();
}
CharacterSet single_char() {
CharacterSet value;
switch (peek()) {
@ -112,7 +112,7 @@ namespace tree_sitter {
}
return value;
}
CharacterSet escaped_char(char value) {
switch (value) {
case '\\':
@ -128,52 +128,52 @@ namespace tree_sitter {
return CharacterSet();
}
}
void next() {
position++;
}
char peek() {
return input[position];
}
bool has_more_input() {
return position < length;
}
bool has_error() {
return error != "";
}
string error;
const string input;
const size_t length;
size_t position;
};
Pattern::Pattern(const string &string) : value(string) {};
bool Pattern::operator==(tree_sitter::rules::Rule const &other) const {
auto pattern = dynamic_cast<const Pattern *>(&other);
return pattern && (pattern->value == value);
}
size_t Pattern::hash_code() const {
return hash<string>()(value);
}
rule_ptr Pattern::copy() const {
return std::make_shared<Pattern>(*this);
}
string Pattern::to_string() const {
return string("#<pattern '") + value + "'>";
}
void Pattern::accept(Visitor &visitor) const {
visitor.visit(this);
}
rule_ptr Pattern::to_rule_tree() const {
return PatternParser(value).rule();
}