Class: RaddDjur::Grammar
- Inherits:
-
Object
- Object
- RaddDjur::Grammar
- Includes:
- Parsers
- Defined in:
- lib/radd_djur/grammar.rb
Defined Under Namespace
Modules: Parsers Classes: Derivs, ParseError, Parsed, Parser, Result
Constant Summary collapse
- INSTANCE_EVAL_USING_AVAILABLE =
begin instance_eval(using: RaddDjur::DSL) {} true rescue false end
- NO_PARSE =
Result.new
Instance Method Summary collapse
- #define(sym, parser = yield)) ⇒ Object
-
#initialize(start_symbol, &block) ⇒ Grammar
constructor
A new instance of Grammar.
- #method_missing(mid, *args) ⇒ Object
- #parse(str) ⇒ Object
- #parser(sym) ⇒ Object
Methods included from Parsers
any_char, char, fail, ret, string
Constructor Details
#initialize(start_symbol, &block) ⇒ Grammar
Returns a new instance of Grammar.
173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/radd_djur/grammar.rb', line 173 def initialize(start_symbol, &block) @parsers = {} @start_symbol = start_symbol if block if INSTANCE_EVAL_USING_AVAILABLE instance_eval(using: RaddDjur::DSL, &block) else instance_eval(&block) end end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
Instance Method Details
#define(sym, parser = yield)) ⇒ Object
193 194 195 |
# File 'lib/radd_djur/grammar.rb', line 193 def define(sym, parser = yield) @parsers[sym] = parser.to_parser end |
#parse(str) ⇒ Object
185 186 187 188 189 190 191 |
# File 'lib/radd_djur/grammar.rb', line 185 def parse(str) result = Derivs.new(self, str).send(@start_symbol).force if !result.succeeded? raise ParseError, "parse error" end result.value end |
#parser(sym) ⇒ Object
197 198 199 |
# File 'lib/radd_djur/grammar.rb', line 197 def parser(sym) @parsers[sym] end |