class Grammoire::Grammar
Public Class Methods
new(random_generator = RandomGenerator.new)
click to toggle source
# File lib/grammoire/grammar.rb, line 4 def initialize(random_generator = RandomGenerator.new) @rules = [] @chooser = RuleChooser.new(random_generator) context(EvaluationContext) end
Public Instance Methods
context(context_class)
click to toggle source
# File lib/grammoire/grammar.rb, line 10 def context(context_class) @context = context_class.new(self) end
evaluate(rule_name, data = {})
click to toggle source
# File lib/grammoire/grammar.rb, line 18 def evaluate(rule_name, data = {}) @context.with_data_points(data) return @chooser.select_from(rules_for(rule_name)).evaluate(@context) end
rule(name, &action)
click to toggle source
# File lib/grammoire/grammar.rb, line 14 def rule(name, &action) @rules << Rule.new(name, &action) end
Private Instance Methods
rules_for(name)
click to toggle source
# File lib/grammoire/grammar.rb, line 26 def rules_for(name) rules = @rules.select { |rule| rule.name == name && rule.applies?(@context) } raise GrammarError.new("Rule '#{name}' doesn't exist in the grammar or don't have valid pre-conditions.") if rules.empty? return rules end