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.



9
10
11
12
13
# File 'lib/collie/analyzer/recursion.rb', line 9

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

Instance Method Details

#analyzeObject



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

def analyze
  @grammar.rules.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)


27
28
29
# File 'lib/collie/analyzer/recursion.rb', line 27

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

#right_recursive?(rule_name) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/collie/analyzer/recursion.rb', line 31

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