@@ -7,34 +7,34 @@ namespace peg_parser {
7
7
template <class R = void , typename ... Args> class ParserGenerator : public Program <R, Args...> {
8
8
private:
9
9
presets::GrammarProgram grammarProgram;
10
- std::unordered_map<std::string, std::shared_ptr<presets ::Rule>> rules;
11
- presets::GrammarNode ::Shared separatorRule;
10
+ std::unordered_map<std::string, std::shared_ptr<grammar ::Rule>> rules;
11
+ grammar::Node ::Shared separatorRule;
12
12
13
13
public:
14
- ParserGenerator () { grammarProgram = presets::createGrammarProgram (); }
14
+ ParserGenerator () { grammarProgram = presets::createPEGProgram (); }
15
15
16
- std::shared_ptr<presets ::Rule> getRule (const std::string &name) {
16
+ std::shared_ptr<grammar ::Rule> getRule (const std::string &name) {
17
17
auto it = rules.find (name);
18
18
if (it != rules.end ()) {
19
19
return it->second ;
20
20
}
21
- auto rule = presets ::makeRule (name, presets::GrammarNode ::Error ());
21
+ auto rule = grammar ::makeRule (name, grammar::Node ::Error ());
22
22
rules[name] = rule;
23
23
return rule;
24
24
}
25
25
26
- presets::GrammarNode ::Shared getRuleNode (const std::string &name) {
27
- auto rule = presets::GrammarNode ::WeakRule (getRule (std::string (name)));
26
+ grammar::Node ::Shared getRuleNode (const std::string &name) {
27
+ auto rule = grammar::Node ::WeakRule (getRule (std::string (name)));
28
28
if (separatorRule) {
29
- auto separator = presets::GrammarNode ::ZeroOrMore (separatorRule);
30
- return presets::GrammarNode ::Sequence ({separator, rule, separator});
29
+ auto separator = grammar::Node ::ZeroOrMore (separatorRule);
30
+ return grammar::Node ::Sequence ({separator, rule, separator});
31
31
} else {
32
32
return rule;
33
33
}
34
34
}
35
35
36
- std::shared_ptr<presets ::Rule> setRule (
37
- const std::string &name, const presets::GrammarNode ::Shared &grammar,
36
+ std::shared_ptr<grammar ::Rule> setRule (
37
+ const std::string &name, const grammar::Node ::Shared &grammar,
38
38
const typename Interpreter<R, Args...>::Callback &callback
39
39
= typename Interpreter<R, Args...>::Callback()) {
40
40
auto rule = getRule (name);
@@ -43,23 +43,23 @@ namespace peg_parser {
43
43
return rule;
44
44
}
45
45
46
- presets::GrammarNode ::Shared parseRule (const std::string_view &grammar) {
46
+ grammar::Node ::Shared parseRule (const std::string_view &grammar) {
47
47
presets::RuleGetter rg = [this ](const auto &name) { return getRuleNode (std::string (name)); };
48
48
return grammarProgram.run (grammar, rg);
49
49
}
50
50
51
- std::shared_ptr<presets ::Rule> setRule (
51
+ std::shared_ptr<grammar ::Rule> setRule (
52
52
const std::string &name, const std::string_view &grammar,
53
53
const typename Interpreter<R, Args...>::Callback &callback
54
54
= typename Interpreter<R, Args...>::Callback()) {
55
55
return setRule (name, parseRule (grammar), callback);
56
56
}
57
57
58
58
template <class R2 , typename ... Args2, class C >
59
- std::shared_ptr<presets ::Rule> setProgramRule (const std::string &name,
59
+ std::shared_ptr<grammar ::Rule> setProgramRule (const std::string &name,
60
60
Program<R2, Args2...> subprogram, C &&callback) {
61
61
auto rule = getRule (name);
62
- rule->node = presets::GrammarNode ::Rule (subprogram.parser .grammar );
62
+ rule->node = grammar::Node ::Rule (subprogram.parser .grammar );
63
63
this ->interpreter .setEvaluator (
64
64
rule, [callback = std::forward<C>(callback), interpreter = subprogram.interpreter ](
65
65
auto e, Args &&... args) {
@@ -73,42 +73,41 @@ namespace peg_parser {
73
73
static_assert (sizeof ...(Args2) == 0 );
74
74
static_assert (std::is_convertible<R2, R>::value);
75
75
auto rule = getRule (name);
76
- rule->node = presets::GrammarNode ::Rule (subprogram.parser .grammar );
76
+ rule->node = grammar::Node ::Rule (subprogram.parser .grammar );
77
77
this ->interpreter .setEvaluator (rule,
78
78
[interpreter = subprogram.interpreter ](auto e, auto &&...) {
79
79
return R (interpreter.interpret (e[0 ].syntax ()).evaluate ());
80
80
});
81
81
}
82
82
83
- std::shared_ptr<presets ::Rule> setFilteredRule (
83
+ std::shared_ptr<grammar ::Rule> setFilteredRule (
84
84
const std::string &name, const std::string_view &grammar,
85
- const presets::GrammarNode ::FilterCallback &filter,
85
+ const grammar::Node ::FilterCallback &filter,
86
86
const typename Interpreter<R, Args...>::Callback &callback
87
87
= typename Interpreter<R, Args...>::Callback()) {
88
88
return setRule (name,
89
- presets::GrammarNode::Sequence (
90
- {parseRule (grammar), presets::GrammarNode::Filter (filter)}),
89
+ grammar::Node::Sequence ({parseRule (grammar), grammar::Node::Filter (filter)}),
91
90
callback);
92
91
}
93
92
94
- void setSeparator (const std::shared_ptr<presets ::Rule> &rule) {
93
+ void setSeparator (const std::shared_ptr<grammar ::Rule> &rule) {
95
94
rule->hidden = true ;
96
- separatorRule = presets::GrammarNode ::Rule (rule);
95
+ separatorRule = grammar::Node ::Rule (rule);
97
96
}
98
97
99
- std::shared_ptr<presets ::Rule> setSeparatorRule (const std::string &name,
100
- const presets::GrammarNode ::Shared &grammar) {
98
+ std::shared_ptr<grammar ::Rule> setSeparatorRule (const std::string &name,
99
+ const grammar::Node ::Shared &grammar) {
101
100
auto rule = setRule (name, grammar);
102
101
setSeparator (rule);
103
102
return rule;
104
103
}
105
104
106
- std::shared_ptr<presets ::Rule> setSeparatorRule (const std::string &name,
105
+ std::shared_ptr<grammar ::Rule> setSeparatorRule (const std::string &name,
107
106
const std::string_view &grammar) {
108
107
return setSeparatorRule (name, parseRule (grammar));
109
108
}
110
109
111
- void setStart (const std::shared_ptr<presets ::Rule> &rule) { this ->parser .grammar = rule; }
110
+ void setStart (const std::shared_ptr<grammar ::Rule> &rule) { this ->parser .grammar = rule; }
112
111
113
112
void unsetSeparatorRule () { separatorRule.reset (); }
114
113
@@ -119,7 +118,7 @@ namespace peg_parser {
119
118
std::string ruleName;
120
119
std::string grammar;
121
120
typename Interpreter<R, Args...>::Callback callback;
122
- presets::GrammarNode ::FilterCallback filter;
121
+ grammar::Node ::FilterCallback filter;
123
122
124
123
OperatorDelegate (ParserGenerator *p, const std::string &n) : parent(p), ruleName(n) {}
125
124
OperatorDelegate (const OperatorDelegate &) = delete ;
@@ -134,14 +133,14 @@ namespace peg_parser {
134
133
return *this ;
135
134
}
136
135
137
- OperatorDelegate &operator <<(const presets::GrammarNode ::FilterCallback &ft) {
136
+ OperatorDelegate &operator <<(const grammar::Node ::FilterCallback &ft) {
138
137
this ->filter = ft;
139
138
return *this ;
140
139
}
141
140
142
- operator std::shared_ptr<presets ::Rule>() { return parent->getRule (ruleName); }
141
+ operator std::shared_ptr<grammar ::Rule>() { return parent->getRule (ruleName); }
143
142
144
- std::shared_ptr<presets ::Rule> operator ->() { return parent->getRule (ruleName); }
143
+ std::shared_ptr<grammar ::Rule> operator ->() { return parent->getRule (ruleName); }
145
144
146
145
~OperatorDelegate () {
147
146
if (grammar.size () > 0 ) {
0 commit comments