Sha256: 9930684d6d1466d4da2824f2e2309b0d49573d675402474945905931aa1cb0d7
Contents?: true
Size: 1.29 KB
Versions: 1
Compression:
Stored size: 1.29 KB
Contents
module Treetop class Grammar attr_accessor :root, :builder, :name def initialize(name = nil, &block) @name = name @parsing_rules = Hash.new @nonterminal_symbols = Hash.new self.builder = GrammarBuilder.new(self) build &block if block end def new_parser Parser.new(self) end def nonterminal_symbol(ruby_sym) @nonterminal_symbols[ruby_sym] ||= NonterminalSymbol.new(ruby_sym, self) end def add_parsing_rule(parsing_rule_or_nonterminal, expression = nil) rule = make_parsing_rule(parsing_rule_or_nonterminal, expression) @parsing_rules[rule.nonterminal_symbol.name] = rule self.root ||= rule.nonterminal_symbol end def get_parsing_expression(nonterminal_symbol) if @parsing_rules[nonterminal_symbol.name] @parsing_rules[nonterminal_symbol.name].parsing_expression else raise "No parsing rule found named #{nonterminal_symbol}." end end def build(&block) builder.build &block end private def make_parsing_rule(rule_or_nonterminal, expression) if rule_or_nonterminal.is_a? NonterminalSymbol return ParsingRule.new(rule_or_nonterminal, expression) else return rule_or_nonterminal end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
treetop-0.1.0 | lib/treetop/grammar/grammar.rb |