Class: PEG::GrammarGenerator
Class Method Summary collapse
- .class(node, children) ⇒ Object
- .definition(node, children) ⇒ Object
- .dot(node, children) ⇒ Object
- .expression(node, children) ⇒ Object
- .expression__sequence(node, children) ⇒ Object
- .expression__zeroormore(node, children) ⇒ Object
- .grammar(node, children) ⇒ Object
- .grammar__oneormore(node, children) ⇒ Object
- .identifier(node, children) ⇒ Object
- .identifier__regex(node, children) ⇒ Object
- .literal(node, children) ⇒ Object
- .prefix(node, children) ⇒ Object
- .prefix__optional(node, children) ⇒ Object
- .primary(node, children) ⇒ Object
- .primary__parens(node, children) ⇒ Object
- .primary__sequence(node, children) ⇒ Object
- .sequence(node, children) ⇒ Object
- .suffix(node, children) ⇒ Object
- .suffix__optional(node, children) ⇒ Object
Methods inherited from Visitor
Class Method Details
.class(node, children) ⇒ Object
192 193 194 195 |
# File 'lib/peg.rb', line 192 def self.class(node, children) class_, spacing = children Regex.new(class_.text) end |
.definition(node, children) ⇒ Object
197 198 199 200 |
# File 'lib/peg.rb', line 197 def self.definition(node, children) identifier, left_arrow, expression = children expression.name(identifier.reference) end |
.dot(node, children) ⇒ Object
188 189 190 |
# File 'lib/peg.rb', line 188 def self.dot(node, children) Regex.new('.') end |
.expression(node, children) ⇒ Object
202 203 204 205 |
# File 'lib/peg.rb', line 202 def self.expression(node, children) sequence, rest = children rest.length == 0 ? sequence : Or.new(sequence, *rest) end |
.expression__sequence(node, children) ⇒ Object
211 212 213 214 |
# File 'lib/peg.rb', line 211 def self.expression__sequence(node, children) slash, sequence = children sequence end |
.expression__zeroormore(node, children) ⇒ Object
207 208 209 |
# File 'lib/peg.rb', line 207 def self.expression__zeroormore(node, children) children end |
.grammar(node, children) ⇒ Object
216 217 218 219 |
# File 'lib/peg.rb', line 216 def self.grammar(node, children) spacing, definitions = children definitions end |
.grammar__oneormore(node, children) ⇒ Object
221 222 223 |
# File 'lib/peg.rb', line 221 def self.grammar__oneormore(node, children) children end |
.identifier(node, children) ⇒ Object
179 180 181 182 |
# File 'lib/peg.rb', line 179 def self.identifier(node, children) identifier_regex, spacing = children Reference.new(identifier_regex) end |
.identifier__regex(node, children) ⇒ Object
175 176 177 |
# File 'lib/peg.rb', line 175 def self.identifier__regex(node, children) node.text end |
.literal(node, children) ⇒ Object
184 185 186 |
# File 'lib/peg.rb', line 184 def self.literal(node, children) Literal.new(Kernel.eval(node.text)) end |
.prefix(node, children) ⇒ Object
243 244 245 246 |
# File 'lib/peg.rb', line 243 def self.prefix(node, children) prefix, suffix = children prefix == '' ? suffix : {'&' => And, '!' => Not}.fetch(prefix).new(suffix) end |
.prefix__optional(node, children) ⇒ Object
239 240 241 |
# File 'lib/peg.rb', line 239 def self.prefix__optional(node, children) node.text.strip # HACK end |
.primary(node, children) ⇒ Object
225 226 227 |
# File 'lib/peg.rb', line 225 def self.primary(node, children) children[0] end |
.primary__parens(node, children) ⇒ Object
234 235 236 237 |
# File 'lib/peg.rb', line 234 def self.primary__parens(node, children) open, expression, close = children expression end |
.primary__sequence(node, children) ⇒ Object
229 230 231 232 |
# File 'lib/peg.rb', line 229 def self.primary__sequence(node, children) identifier, not_left_arrow = children identifier end |
.sequence(node, children) ⇒ Object
248 249 250 |
# File 'lib/peg.rb', line 248 def self.sequence(node, children) children.length == 1 ? children[0] : Sequence.new(*children) end |
.suffix(node, children) ⇒ Object
256 257 258 259 260 261 262 263 |
# File 'lib/peg.rb', line 256 def self.suffix(node, children) primary, optional_suffix = children optional_suffix == '' ? primary : { '?' => Optional, '*' => ZeroOrMore, '+' => OneOrMore, }.fetch(optional_suffix).new(primary) end |
.suffix__optional(node, children) ⇒ Object
252 253 254 |
# File 'lib/peg.rb', line 252 def self.suffix__optional(node, children) node.text.strip # HACK end |