Sha256: 6b20fa7d503eb257cdab43e53091a8fbbd7e1a97d7a94d318234b825fa361473

Contents?: true

Size: 992 Bytes

Versions: 1

Compression:

Stored size: 992 Bytes

Contents

module Treetop
  class GrammarBuilder
    attr_accessor :grammar
    include ParsingExpressionBuilderHelper
  
    def initialize(grammar)
      self.grammar = grammar
    end
  
    def build(&block)
      instance_eval(&block)
    end
      
    def root(sym)
      grammar.root = grammar.nonterminal_symbol(sym)
    end
  
    def rule(nonterminal_name, expression_or_expression_builder)
      nonterminal_symbol = grammar.nonterminal_symbol(nonterminal_name)
      parsing_expression = parsing_expression_for(expression_or_expression_builder)

      grammar.add_parsing_rule(nonterminal_symbol, parsing_expression)
    end
  
    def parsing_expression_for(expression_or_expression_builder)
      case expression_or_expression_builder
      when ParsingExpression
        return expression_or_expression_builder
      when ParsingExpressionBuilder
        expression_or_expression_builder.grammar = grammar
        return expression_or_expression_builder.build
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
treetop-0.1.0 lib/treetop/grammar/grammar_builder.rb