Sha256: 439b57488e35af90dc6363006543ba7cb6971741b7a6b40bb084f6160bd7d169

Contents?: true

Size: 693 Bytes

Versions: 16

Compression:

Stored size: 693 Bytes

Contents

module EBNF
  module BNF
    ##
    # Transform EBNF Rule set to BNF:
    #
    #   * Add rule [0] (_empty rule (seq))
    #   * Transform each rule into a set of rules that are just BNF, using {Rule#to_bnf}.
    # @return [ENBF] self
    def make_bnf
      progress("make_bnf") {"Start: #{@ast.length} rules"}
      new_ast = [Rule.new(:_empty, "0", [:seq], kind: :rule)]

      ast.each do |rule|
        debug("make_bnf") {"expand from: #{rule.inspect}"}
        new_rules = rule.to_bnf
        debug(" => ") {new_rules.map(&:sym).join(', ')}
        new_ast += new_rules
      end

      @ast = new_ast
      progress("make_bnf") {"End: #{@ast.length} rules"}
      self
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
ebnf-2.6.0 lib/ebnf/bnf.rb
ebnf-2.5.0 lib/ebnf/bnf.rb
ebnf-2.4.0 lib/ebnf/bnf.rb
ebnf-2.3.5 lib/ebnf/bnf.rb
ebnf-2.3.4 lib/ebnf/bnf.rb
ebnf-2.3.3 lib/ebnf/bnf.rb
ebnf-2.3.2 lib/ebnf/bnf.rb
ebnf-2.3.1 lib/ebnf/bnf.rb
ebnf-2.3.0 lib/ebnf/bnf.rb
ebnf-2.2.1 lib/ebnf/bnf.rb
ebnf-2.2.0 lib/ebnf/bnf.rb
ebnf-2.1.3 lib/ebnf/bnf.rb
ebnf-2.1.2 lib/ebnf/bnf.rb
ebnf-2.1.1 lib/ebnf/bnf.rb
ebnf-2.1.0 lib/ebnf/bnf.rb
ebnf-2.0.0 lib/ebnf/bnf.rb