Sha256: 34f10d29d9be7d4b81ee1694812f283ce435ff7fc0677a1a2388085c4cedfcc9
Contents?: true
Size: 1.18 KB
Versions: 1
Compression:
Stored size: 1.18 KB
Contents
module Antelope module Generation class Constructor module Follow def initialize @follows = {} super end def follow(token) if token.nonterminal? token = token.name elsif token.is_a? Symbol else incorrect_argument! token, Ace::Token::Nonterminal, Symbol end @follows.fetch(token) do @follows[token] = Set.new set = Set.new parser.productions.each do |key, value| value.each do |production| items = production[:items] positions = items.each_with_index. find_all { |t, _| t.name == token }. map(&:last).map(&:succ) positions.map { |pos| first(items[pos..-1]) }. inject(set, :merge) positions.each do |pos| if pos == items.size || nullable?(items[pos..-1]) set.merge follow(Ace::Token::Nonterminal.new(key)) end end end end @follows[token] = set end 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/follow.rb |