Sha256: 135d16fba20f9e7caf6ccbf185ded9ab80c43d9e0e2a66438cb16029a3b30a7b

Contents?: true

Size: 977 Bytes

Versions: 1

Compression:

Stored size: 977 Bytes

Contents

module Treetop
  class Protometagrammar
    class GrammarExpressionBuilder < ParsingExpressionBuilder
      def build
        seq('grammar', :space, grammar_name, :parsing_rule_sequence, optional(:space), 'end') do
          def value
            grammar = Grammar.new(grammar_name)
            parsing_rules(grammar).each do |parsing_rule|
              grammar.add_parsing_rule(parsing_rule)
            end
            return grammar
          end
          
          def grammar_name
            name_string = elements[2].text_value.chop

            if name_string.empty?
              nil
            else
              name_string.to_sym
            end
          end
        
          def parsing_rules(grammar)
            elements[3].value(grammar)
          end
        end
      end
    
      def grammar_name
        optional(
          seq(char_class('A-Z'),
              zero_or_more(char_class('a-z0-9_')),
              :space))
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
treetop-0.1.0 lib/treetop/protometagrammar/grammar_expression_builder.rb