class Parslet::GraphvizVisitor
Attributes
parent[R]
Public Class Methods
new(g)
click to toggle source
# File lib/parslet/graphviz.rb, line 16 def initialize g @graph = g @known_links = Set.new @visited = Set.new end
Public Instance Methods
downwards(child)
click to toggle source
# File lib/parslet/graphviz.rb, line 71 def downwards child if @parent && !@known_links.include?([@parent, child]) @graph.add_edges(@parent, child) @known_links << [@parent, child] end end
escape(str)
click to toggle source
# File lib/parslet/graphviz.rb, line 65 def escape str str.gsub('"', "'") end
node(name, opts={})
click to toggle source
# File lib/parslet/graphviz.rb, line 68 def node name, opts={} @graph.add_nodes name.to_s, opts end
recurse(node, current)
click to toggle source
# File lib/parslet/graphviz.rb, line 77 def recurse node, current @parent = current node.accept(self) end
visit_alternative(alternatives)
click to toggle source
# File lib/parslet/graphviz.rb, line 43 def visit_alternative(alternatives) p = parent alternatives.each do |atom| recurse atom, p end end
visit_entity(name, block)
click to toggle source
# File lib/parslet/graphviz.rb, line 27 def visit_entity(name, block) s = node(name) downwards s return if @visited.include?(name) @visited << name recurse block.call, s end
visit_lookahead(positive, atom)
click to toggle source
# File lib/parslet/graphviz.rb, line 55 def visit_lookahead(positive, atom) recurse atom, parent end
visit_named(name, atom)
click to toggle source
# File lib/parslet/graphviz.rb, line 37 def visit_named(name, atom) recurse atom, parent end
visit_parser(root)
click to toggle source
# File lib/parslet/graphviz.rb, line 24 def visit_parser(root) recurse root, node('parser') end
visit_re(regexp)
click to toggle source
# File lib/parslet/graphviz.rb, line 58 def visit_re(regexp) # downwards node(regexp.object_id, label: escape("re(#{regexp.inspect})")) end
visit_repetition(tag, min, max, atom)
click to toggle source
# File lib/parslet/graphviz.rb, line 40 def visit_repetition(tag, min, max, atom) recurse atom, parent end
visit_sequence(sequence)
click to toggle source
# File lib/parslet/graphviz.rb, line 49 def visit_sequence(sequence) p = parent sequence.each do |atom| recurse atom, p end end
visit_str(str)
click to toggle source
# File lib/parslet/graphviz.rb, line 61 def visit_str(str) # downwards node(str.object_id, label: escape("#{str.inspect}")) end