# File lib/journey/gtg/builder.rb, line 81 def firstpos node case node when Nodes::Star firstpos(node.left) when Nodes::Cat if nullable? node.left firstpos(node.left) | firstpos(node.right) else firstpos(node.left) end when Nodes::Or node.children.map { |c| firstpos(c) }.flatten.uniq when Nodes::Unary firstpos(node.left) when Nodes::Terminal nullable?(node) ? [] : [node] else raise ArgumentError, 'unknown firstpos: %s' % node.class.name end end