Class Teeth::Scanner
In: lib/scanner.rb
Parent: Object

Methods

Constants

TEMPLATE = File.dirname(__FILE__) + "/../templates/tokenizer.yy.erb"

Attributes

rdoc  [R] 
scanner_defns  [R] 
scanner_rules  [R] 

Public Class methods

[Source]

# File lib/scanner.rb, line 13
    def initialize(name, ext_dir=nil)
      @scanner_base_name, @ext_dir = name, ext_dir
      @scanner_defns, @scanner_rules = ScannerDefinitionGroup.new, RuleStatementGroup.new
      ensure_ext_dir_exists if ext_dir
    end

Public Instance methods

[Source]

# File lib/scanner.rb, line 51
    def define(*args)
      @scanner_defns.add(*args)
    end

[Source]

# File lib/scanner.rb, line 55
    def definitions
      yield @scanner_defns
    end

[Source]

# File lib/scanner.rb, line 35
    def entry_point
      "scan_" + @scanner_base_name.to_s
    end

[Source]

# File lib/scanner.rb, line 39
    def extconf
      'require "mkmf"' + "\n" + '$CFLAGS += " -Wall"' + "\n" + "create_makefile " +
      %Q|"teeth/#{scanner_name}", "./"\n| 
    end

[Source]

# File lib/scanner.rb, line 31
    def function_prefix
      @scanner_base_name.to_s + "_yy"
    end

[Source]

# File lib/scanner.rb, line 71
    def generate
      template = ERB.new(IO.read(TEMPLATE))
      scanner = self
      b = binding
      template.result(b)
    end

[Source]

# File lib/scanner.rb, line 27
    def init_function_name
      "Init_" + scanner_name
    end

[Source]

# File lib/scanner.rb, line 59
    def load_default_definitions_for(*defn_types)
      @scanner_defns.defaults_for(*defn_types)
    end

[Source]

# File lib/scanner.rb, line 23
    def main_function_name
      "t_" + scanner_name
    end

[Source]

# File lib/scanner.rb, line 44
    def rdoc=(rdoc_text)
      lines_of_rdoc_text = rdoc_text.split("\n").map { |line| " * " + line.strip}
      lines_of_rdoc_text.first[0] = "/"
      lines_of_rdoc_text[-1] = lines_of_rdoc_text.last + " */"
      @rdoc = lines_of_rdoc_text.join("\n")
    end

[Source]

# File lib/scanner.rb, line 63
    def rule(*args)
      scanner_rules.add(*args)
    end

[Source]

# File lib/scanner.rb, line 67
    def rules
      yield scanner_rules
    end

[Source]

# File lib/scanner.rb, line 19
    def scanner_name
      "scan_" + @scanner_base_name.to_s
    end

[Source]

# File lib/scanner.rb, line 78
    def write!
      raise InvalidExtensionDirectory, "no extension directory specified" unless @ext_dir
      File.open(@ext_dir + "/extconf.rb", "w") do |extconf_rb|
        extconf_rb.write extconf
      end
      File.open(@ext_dir + "/" + scanner_name + ".yy", "w") do |scanner|
        scanner.write generate
      end
    end

[Validate]