class ScopedSearch::QueryLanguage::AST::OperatorNode
AST class for representing operators in the query. An operator node has an operator and operands that are represented as AST child nodes. Usually, operator nodes have one or two children. For logical operators, a distinct subclass exists to implement some tree simplification rules.
Attributes
children[R]
operator[R]
Public Class Methods
new(operator, children, root_node = false)
click to toggle source
# File lib/scoped_search/query_language/ast.rb, line 71 def initialize(operator, children, root_node = false) # :nodoc @operator = operator @children = children raise ScopedSearch::QueryNotSupported, "Empty list of operands" if @children.empty? && !root_node end
Public Instance Methods
[](child_nr)
click to toggle source
Returns a child node by index, starting with 0.
# File lib/scoped_search/query_language/ast.rb, line 121 def [](child_nr) children[child_nr] end
empty?()
click to toggle source
# File lib/scoped_search/query_language/ast.rb, line 106 def empty? children.length == 0 end
eql?(node)
click to toggle source
# File lib/scoped_search/query_language/ast.rb, line 89 def eql?(node) # :nodoc node.kind_of?(OperatorNode) && node.operator == operator && node.children.eql?(children) end
infix?()
click to toggle source
Returns true if this is an infix operator
# File lib/scoped_search/query_language/ast.rb, line 111 def infix? children.length > 1 end
lhs()
click to toggle source
Return the left-hand side (LHS) operand for this operator.
# File lib/scoped_search/query_language/ast.rb, line 94 def lhs raise ScopedSearch::Exception, "Operator does not have a LHS" if prefix? raise ScopedSearch::Exception, "Operators with more than 2 children do not have LHS/RHS" if children.length > 2 children[0] end
prefix?()
click to toggle source
Returns true if this is a prefix operator
# File lib/scoped_search/query_language/ast.rb, line 116 def prefix? children.length == 1 end
rhs()
click to toggle source
Return the right-hand side (RHS) operand for this operator.
# File lib/scoped_search/query_language/ast.rb, line 101 def rhs raise ScopedSearch::Exception, "Operators with more than 2 children do not have LHS/RHS" if children.length > 2 children.length == 1 ? children[0] : children[1] end
simplify()
click to toggle source
Tree simplicication: returns itself after simpifying its children
# File lib/scoped_search/query_language/ast.rb, line 79 def simplify @children = children.map { |c| c.simplify } return self end
to_a()
click to toggle source
Return an array representation for the node
# File lib/scoped_search/query_language/ast.rb, line 85 def to_a [@operator] + @children.map { |c| c.to_a } end