Sha256: a741da88e457e405996d97c2147a231c44e2fe199e4e39852458a7cbbe4ccc82

Contents?: true

Size: 864 Bytes

Versions: 1

Compression:

Stored size: 864 Bytes

Contents

module Antelope
  module Generation
    class Constructor
      module Lookahead

        def initialize
          @lookaheads = {}
          super
        end

        def lookahead(left, right = nil)
          @lookaheads.fetch([left, right]) do
            if right
              set = Set.new

              set += if nullable?(right)
                first(right) + follow(left)
              else
                first(right)
              end
            else
              set = lookahead_nonterminal(left)
            end

            @lookaheads[[left, right]] = set
          end
        end

        private

        def lookahead_nonterminal(left)
          set = Set.new
          parser.productions[left].each do |production|
            set += lookahead(left, production[:items])
          end

          set
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
antelope-0.0.1 lib/antelope/generation/constructor/lookahead.rb