Class: Collie::Analyzer::Recursion

Inherits:
Object
  • Object
show all
Defined in:
lib/collie/analyzer/recursion.rb

Overview

Recursion analysis for grammar rules

Instance Method Summary collapse

Constructor Details

#initialize(grammar) ⇒ Recursion

Returns a new instance of Recursion.



11
12
13
14
15
# File 'lib/collie/analyzer/recursion.rb', line 11

def initialize(grammar)
  @grammar = grammar
  @left_recursive = []
  @right_recursive = []
end

Instance Method Details

#analyzeObject



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/collie/analyzer/recursion.rb', line 17

def analyze
  rule_like_nodes.each do |rule|
    check_left_recursion(rule)
    check_right_recursion(rule)
  end

  {
    left_recursive: @left_recursive,
    right_recursive: @right_recursive
  }
end

#left_recursive?(rule_name) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/collie/analyzer/recursion.rb', line 29

def left_recursive?(rule_name)
  @left_recursive.include?(rule_name)
end

#right_recursive?(rule_name) ⇒ Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/collie/analyzer/recursion.rb', line 33

def right_recursive?(rule_name)
  @right_recursive.include?(rule_name)
end