examples/general/SRL/lib/regex/compound_expression.rb in rley-0.6.00 vs examples/general/SRL/lib/regex/compound_expression.rb in rley-0.6.01

- old
+ new

@@ -1,60 +1,57 @@ # File: compound_expression.rb -require_relative "expression" # Access the superclass +require_relative 'expression' # Access the superclass module Regex # This module is used as a namespace + # Abstract class. An element that is part of a regular expression & + # that has its own child sub-expressions. + class CompoundExpression < Expression + # Redefined method. Return false since it may have one or more children. + def atomic? + return false + end -# Abstract class. An element that is part of a regular expression & -# that has its own child sub-expressions. -class CompoundExpression < Expression - -public - # Redefined method. Return false since it may have one or more children. - def atomic? - return false - end - -=begin - # Build a depth-first in-order children visitor. - # The visitor is implemented as an Enumerator. - def df_visitor() - root = children # The visit will start from the children of this object - - visitor = Enumerator.new do |result| # result is a Yielder - # Initialization part: will run once - visit_stack = [ root ] # The LIFO queue of nodes to visit - - begin # Traversal part (as a loop) - top = visit_stack.pop() - if top.kind_of?(Array) - if top.empty? - next - else - currChild = top.pop() - visit_stack.push top - end - else - currChild = top - end - - result << currChild # Return the visited child - - unless currChild.atomic? - children_to_enqueue = currChild.children.reverse() # in-order traversal implies LIFO queue - visit_stack.push(children_to_enqueue) - end - end until visit_stack.empty? - end - end -=end +=begin + # Build a depth-first in-order children visitor. + # The visitor is implemented as an Enumerator. + def df_visitor() + root = children # The visit will start from the children of this object -protected - # Abstract method. Return the text representation of the child (if any) - def all_child_text() abstract_method() - end + visitor = Enumerator.new do |result| # result is a Yielder + # Initialization part: will run once + visit_stack = [ root ] # The LIFO queue of nodes to visit -end # class + begin # Traversal part (as a loop) + top = visit_stack.pop() + if top.kind_of?(Array) + if top.empty? + next + else + currChild = top.pop() + visit_stack.push top + end + else + currChild = top + end + result << currChild # Return the visited child + + unless currChild.atomic? + children_to_enqueue = currChild.children.reverse() # in-order traversal implies LIFO queue + visit_stack.push(children_to_enqueue) + end + end until visit_stack.empty? + end + end +=end + + protected + + # Abstract method. Return the text representation of the child (if any) + def all_child_text() + abstract_method + end + end # class end # module -# End of file \ No newline at end of file +# End of file