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 71 def initialize(operator, children, root_node = false) # :nodoc 72 @operator = operator 73 @children = children 74 75 raise ScopedSearch::QueryNotSupported, "Empty list of operands" if @children.empty? && !root_node 76 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 121 def [](child_nr) 122 children[child_nr] 123 end
empty?()
click to toggle source
# File lib/scoped_search/query_language/ast.rb 106 def empty? 107 children.length == 0 108 end
eql?(node)
click to toggle source
# File lib/scoped_search/query_language/ast.rb 89 def eql?(node) # :nodoc 90 node.kind_of?(OperatorNode) && node.operator == operator && node.children.eql?(children) 91 end
infix?()
click to toggle source
Returns true if this is an infix operator
# File lib/scoped_search/query_language/ast.rb 111 def infix? 112 children.length > 1 113 end
lhs()
click to toggle source
Return the left-hand side (LHS) operand for this operator.
# File lib/scoped_search/query_language/ast.rb 94 def lhs 95 raise ScopedSearch::Exception, "Operator does not have a LHS" if prefix? 96 raise ScopedSearch::Exception, "Operators with more than 2 children do not have LHS/RHS" if children.length > 2 97 children[0] 98 end
prefix?()
click to toggle source
Returns true if this is a prefix operator
# File lib/scoped_search/query_language/ast.rb 116 def prefix? 117 children.length == 1 118 end
rhs()
click to toggle source
Return the right-hand side (RHS) operand for this operator.
# File lib/scoped_search/query_language/ast.rb 101 def rhs 102 raise ScopedSearch::Exception, "Operators with more than 2 children do not have LHS/RHS" if children.length > 2 103 children.length == 1 ? children[0] : children[1] 104 end
simplify()
click to toggle source
Tree simplicication: returns itself after simpifying its children
# File lib/scoped_search/query_language/ast.rb 79 def simplify 80 @children = children.map { |c| c.simplify } 81 return self 82 end
to_a()
click to toggle source
Return an array representation for the node
# File lib/scoped_search/query_language/ast.rb 85 def to_a 86 [@operator] + @children.map { |c| c.to_a } 87 end