class Rattler::Parsers::Grammar

Grammar represents a parsed grammar

Constants

DEFAULT_PARSER_BASE

The name of the default parser base class

Public Class Methods

new(rules, opts={}) click to toggle source

@param rules [RuleSet] the parse rules that define the parser

@option opts [String] start_rule (rules.first.name) @option opts [String] grammar_name (nil) @option opts [String] parser_name (nil) @option opts [String] base_name (Rattler::Runtime::RecursiveDescentParser) @option opts [Array<String>] requires ([]) @option opts [Array<String>] includes ([])

Calls superclass method Rattler::Util::Node::new
# File lib/rattler/parsers/grammar.rb, line 33
def initialize(rules, opts={})
  start_rule =
    opts[:start_rule] || rules.start_rule || (rules.first && rules.first.name)

  super rules.with_attrs(:start_rule => start_rule),
    @@default_opts.merge(:start_rule => start_rule).merge(opts)

  attrs[:name] ||= grammar_name || parser_name
end

Public Instance Methods

analysis() click to toggle source

@return [Analysis] a static analysis of the grammar rules

# File lib/rattler/parsers/grammar.rb, line 52
def analysis
  rules.analysis
end
rule(name) click to toggle source

@param [Symbol] name the name of a parse rule in the grammar @return [Rule] the parse rule referenced by name

# File lib/rattler/parsers/grammar.rb, line 47
def rule(name)
  rules[name]
end
with_rules(new_rules) click to toggle source

@param [RuleSet] new_rules @return [Grammar] a new grammar with the parse rules replaced by

+new_rules+
# File lib/rattler/parsers/grammar.rb, line 59
def with_rules(new_rules)
  self.class.new new_rules, attrs
end