Get rid of types for shared pointers to rule subclasses

This commit is contained in:
Max Brunsfeld 2013-12-19 20:05:57 -08:00
parent c3b8a73831
commit 9f78d72a7c
14 changed files with 53 additions and 37 deletions

View file

@ -54,6 +54,7 @@
12FD40DD185FF12C0041A84E /* parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40DC185FF12C0041A84E /* parser.c */; };
12FD40DF1860064C0041A84E /* tree.c in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40DE1860064C0041A84E /* tree.c */; };
12FD40E2186245FE0041A84E /* transitions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40E0186245FE0041A84E /* transitions.cpp */; };
12FD40E718639B910041A84E /* rule_visitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12FD40E618639B910041A84E /* rule_visitor.cpp */; };
27A343CA69E17E0F9EBEDF1C /* pattern.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 27A340F3EEB184C040521323 /* pattern.cpp */; };
/* End PBXBuildFile section */
@ -133,6 +134,7 @@
12FD40E0186245FE0041A84E /* transitions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transitions.cpp; sourceTree = "<group>"; };
12FD40E1186245FE0041A84E /* transitions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transitions.h; sourceTree = "<group>"; };
12FD40E41862B3530041A84E /* rule_visitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rule_visitor.h; sourceTree = "<group>"; };
12FD40E618639B910041A84E /* rule_visitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rule_visitor.cpp; sourceTree = "<group>"; };
27A340F3EEB184C040521323 /* pattern.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pattern.cpp; sourceTree = "<group>"; };
27A3438C4FA59A3882E8493B /* pattern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pattern.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
@ -182,6 +184,7 @@
12FD40E0186245FE0041A84E /* transitions.cpp */,
12FD40E1186245FE0041A84E /* transitions.h */,
12FD40E41862B3530041A84E /* rule_visitor.h */,
12FD40E618639B910041A84E /* rule_visitor.cpp */,
);
path = rules;
sourceTree = "<group>";
@ -436,6 +439,7 @@
12F9A651182DD6BC00FAF50C /* grammar.cpp in Sources */,
12FD40D6185FEEDB0041A84E /* parse_table_builder_spec.cpp in Sources */,
12D136A4183678A2005F3369 /* repeat.cpp in Sources */,
12FD40E718639B910041A84E /* rule_visitor.cpp in Sources */,
12130622182C85D300FCF928 /* item_set.cpp in Sources */,
12130605182C348F00FCF928 /* char.cpp in Sources */,
1213060B182C389100FCF928 /* symbol.cpp in Sources */,

View file

@ -6,9 +6,9 @@ using namespace tree_sitter::rules;
Describe(pattern_rules) {
It(parses_simple_strings) {
pattern_ptr rule = pattern("abc");
Pattern rule("abc");
AssertThat(
rule->to_rule_tree()->to_string(),
rule.to_rule_tree()->to_string(),
Equals(seq({
character('a'),
character('b'),
@ -17,9 +17,9 @@ Describe(pattern_rules) {
};
It(parses_character_classes) {
pattern_ptr rule = pattern("\\w-\\d");
Pattern rule("\\w-\\d");
AssertThat(
rule->to_rule_tree()->to_string(),
rule.to_rule_tree()->to_string(),
Equals(seq({
char_class(CharClassTypeWord),
character('-'),
@ -28,9 +28,9 @@ Describe(pattern_rules) {
};
It(parses_choices) {
pattern_ptr rule = pattern("ab|cd|ef");
Pattern rule("ab|cd|ef");
AssertThat(
rule->to_rule_tree()->to_string(),
rule.to_rule_tree()->to_string(),
Equals(choice({
seq({
character('a'),
@ -48,9 +48,9 @@ Describe(pattern_rules) {
};
It(parses_choices_in_sequences) {
pattern_ptr rule = pattern("(a|b)cd");
Pattern rule("(a|b)cd");
AssertThat(
rule->to_rule_tree()->to_string(),
rule.to_rule_tree()->to_string(),
Equals(seq({
choice({
character('a'),
@ -62,9 +62,9 @@ Describe(pattern_rules) {
};
It(parses_special_characters_when_they_are_escaped) {
pattern_ptr rule = pattern("a\\(b");
Pattern rule("a\\(b");
AssertThat(
rule->to_rule_tree()->to_string(),
rule.to_rule_tree()->to_string(),
Equals(seq({
character('a'),
character('('),
@ -73,9 +73,9 @@ Describe(pattern_rules) {
}
It(parses_repeating_rules) {
pattern_ptr rule = pattern("(ab)+(cd)+");
Pattern rule("(ab)+(cd)+");
AssertThat(
rule->to_rule_tree()->to_string(),
rule.to_rule_tree()->to_string(),
Equals(
seq({
repeat(seq({

View file

@ -23,11 +23,11 @@ namespace tree_sitter {
});
};
vector<rules::sym_ptr> Item::next_symbols() const {
vector<rules::sym_ptr> result;
vector<rules::Symbol> Item::next_symbols() const {
vector<rules::Symbol> result;
for (auto pair : rules::transitions(rule)) {
shared_ptr<const rules::Symbol> sym = dynamic_pointer_cast<const rules::Symbol>(pair.first);
if (sym) result.push_back(sym);
if (sym) result.push_back(*sym);
}
return result;
}

View file

@ -16,7 +16,7 @@ namespace tree_sitter {
static Item at_beginning_of_rule(const std::string &rule_name, const Grammar &grammar);
TransitionMap<Item> transitions() const;
std::vector<rules::sym_ptr> next_symbols() const;
std::vector<rules::Symbol> next_symbols() const;
bool operator==(const Item &other) const;
bool is_done() const;

View file

@ -16,8 +16,8 @@ namespace tree_sitter {
static void add_item(vector<Item> &vector, const Item &item, const Grammar &grammar) {
if (!vector_contains(vector, item)) {
vector.push_back(item);
for (rules::sym_ptr rule : item.next_symbols()) {
Item next_item = Item::at_beginning_of_rule(rule->name, grammar);
for (rules::Symbol rule : item.next_symbols()) {
Item next_item = Item::at_beginning_of_rule(rule.name, grammar);
add_item(vector, next_item, grammar);
}
}

View file

@ -23,7 +23,7 @@ namespace tree_sitter {
void add_shift_actions(const ItemSet &item_set, size_t state_index) {
for (auto transition : item_set.sym_transitions(grammar)) {
rules::sym_ptr symbol = static_pointer_cast<const rules::Symbol>(transition.first);
auto symbol = static_pointer_cast<const rules::Symbol>(transition.first);
size_t new_state_index = add_item_set(*transition.second);
table.add_action(state_index, symbol->name, ParseAction::Shift(new_state_index));
}

View file

@ -103,7 +103,7 @@ namespace tree_sitter {
Pattern::Pattern(const std::string &string) : value(string) {};
pattern_ptr pattern(const std::string &value) {
rule_ptr pattern(const std::string &value) {
return std::make_shared<Pattern>(value);
}

View file

@ -15,8 +15,7 @@ namespace tree_sitter {
rule_ptr to_rule_tree() const;
};
typedef std::shared_ptr<const Pattern> pattern_ptr;
pattern_ptr pattern(const std::string &value);
rule_ptr pattern(const std::string &value);
}
}

View file

@ -0,0 +1,15 @@
#include "rule_visitor.h"
namespace tree_sitter {
namespace rules {
void RuleVisitor::visit(const Blank *rule) {}
void RuleVisitor::visit(const Symbol *rule) {}
void RuleVisitor::visit(const Char *rule) {}
void RuleVisitor::visit(const CharClass *rule) {}
void RuleVisitor::visit(const Choice *rule) {}
void RuleVisitor::visit(const Repeat *rule) {}
void RuleVisitor::visit(const Seq *rule) {}
void RuleVisitor::visit(const String *rule) {}
void RuleVisitor::visit(const Pattern *rule) {}
}
}

View file

@ -7,15 +7,15 @@ namespace tree_sitter {
namespace rules {
class RuleVisitor {
public:
virtual void visit(const Blank *rule) = 0;
virtual void visit(const Symbol *rule) = 0;
virtual void visit(const Char *rule) = 0;
virtual void visit(const CharClass *rule) = 0;
virtual void visit(const Choice *rule) = 0;
virtual void visit(const Repeat *rule) = 0;
virtual void visit(const Seq *rule) = 0;
virtual void visit(const String *rule) = 0;
virtual void visit(const Pattern *rule) = 0;
virtual void visit(const Blank *rule);
virtual void visit(const Symbol *rule);
virtual void visit(const Char *rule);
virtual void visit(const CharClass *rule);
virtual void visit(const Choice *rule);
virtual void visit(const Repeat *rule);
virtual void visit(const Seq *rule);
virtual void visit(const String *rule);
virtual void visit(const Pattern *rule);
};
}
}

View file

@ -5,7 +5,7 @@ namespace tree_sitter {
namespace rules {
String::String(std::string value) : value(value) {};
string_ptr str(const std::string &value) {
rule_ptr str(const std::string &value) {
return std::make_shared<String>(value);
}

View file

@ -15,8 +15,7 @@ namespace tree_sitter {
const std::string value;
};
typedef std::shared_ptr<const String> string_ptr;
string_ptr str(const std::string &value);
rule_ptr str(const std::string &value);
}
}

View file

@ -5,7 +5,7 @@ namespace tree_sitter {
namespace rules {
Symbol::Symbol(const std::string &name) : name(name) {};
sym_ptr sym(const std::string &name) {
rule_ptr sym(const std::string &name) {
return std::make_shared<Symbol>(name);
}

View file

@ -15,8 +15,7 @@ namespace tree_sitter {
const std::string name;
};
typedef std::shared_ptr<const Symbol> sym_ptr;
sym_ptr sym(const std::string &name);
rule_ptr sym(const std::string &name);
}
}