Class: Chronar::Parser::AbstractParslet
- Inherits:
-
Parslet::Parser
- Object
- Parslet::Parser
- Chronar::Parser::AbstractParslet
- Defined in:
- lib/chronar/parser/abstract_parslet.rb
Direct Known Subclasses
AProgram, ArgumentList, Assignment, Bubble, Comment, Conditional, Expression, Identifier, Literal, MethodCall, Number, Operator, Slot, Statement, String, SwapAssignment
Class Method Summary collapse
-
.root(name, &definition) ⇒ Object
Define root rule.
Instance Method Summary collapse
-
#blanks ⇒ Parslet::Atom::Base
Create a new parslet that matches zero or more whitespace characters, comments, and newlines.
-
#bracketed(parslet) ⇒ Parslet::Atom::Base
Create a new parslet by surrounding
parsletwith round brackets.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name) ⇒ Object (private)
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/chronar/parser/abstract_parslet.rb', line 40 def method_missing(name, ...) const = Chronar::Parser.const_get(name.to_s.split("_").map(&:capitalize).join) # print self.class.name, ".", name, " <- ", const, "\n" if const.respond_to?(:new) self.class.rule(name) { const.new(...) } public_send(name) else super end end |
Class Method Details
.root(name, &definition) ⇒ Object
Define root rule. Matched content is automatically named the same.
13 14 15 16 |
# File 'lib/chronar/parser/abstract_parslet.rb', line 13 def self.root(name, &definition) super(name) rule(name) { instance_eval(&definition).as(name) } end |
Instance Method Details
#blanks ⇒ Parslet::Atom::Base
Create a new parslet that matches zero or more whitespace characters, comments, and newlines.
30 31 32 |
# File 'lib/chronar/parser/abstract_parslet.rb', line 30 def blanks (space_separator | comment | newline).repeat end |
#bracketed(parslet) ⇒ Parslet::Atom::Base
Create a new parslet by surrounding parslet with round brackets.
22 23 24 |
# File 'lib/chronar/parser/abstract_parslet.rb', line 22 def bracketed(parslet) str("(") >> parslet >> str(")") end |