class Calyx::Errors::UndefinedRule

Only rules that exist in the registry can be evaluated. When a non-existent rule is referenced, this error is raised.

grammar = Calyx::Grammar.new do
  start :blank
end

grammar.evaluate
# => Calyx::Errors::UndefinedRule: :blank is not defined

Public Class Methods

new(rule, symbol) click to toggle source
Calls superclass method
# File lib/calyx/errors.rb, line 14
def initialize(rule, symbol)
  @trace = if rule
    rule.trace
  else
    trace_api_boundary(caller_locations)
  end

  super("undefined rule :#{symbol} in #{@trace.path}:#{@trace.lineno}:`#{source_line}`")
end

Public Instance Methods

source_line() click to toggle source
# File lib/calyx/errors.rb, line 32
def source_line
  File.open(@trace.absolute_path) do |source|
    (@trace.lineno-1).times { source.gets }
    source.gets
  end.strip
end
trace_api_boundary(trace) click to toggle source
# File lib/calyx/errors.rb, line 24
def trace_api_boundary(trace)
  (trace.count - 1).downto(0) do |index|
    if trace[index].to_s.include?('lib/calyx/')
      return trace[index + 1]
    end
  end
end