Skip to content

Commit

Permalink
Rely on load path. Allow direct treetop/runtime require.
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremy committed Mar 7, 2010
1 parent 89baa8a commit 471b670
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 57 deletions.
10 changes: 2 additions & 8 deletions lib/treetop.rb
@@ -1,16 +1,10 @@
require 'rubygems'

module Treetop module Treetop
VALID_GRAMMAR_EXT = ['treetop', 'tt'] VALID_GRAMMAR_EXT = ['treetop', 'tt']
VALID_GRAMMAR_EXT_REGEXP = /\.(#{VALID_GRAMMAR_EXT.join('|')})\Z/o VALID_GRAMMAR_EXT_REGEXP = /\.(#{VALID_GRAMMAR_EXT.join('|')})\Z/o
end end


dir = File.dirname(__FILE__) require 'treetop/runtime'

require 'treetop/compiler'
TREETOP_ROOT = File.join(dir, 'treetop')
require File.join(TREETOP_ROOT, "ruby_extensions")
require File.join(TREETOP_ROOT, "runtime")
require File.join(TREETOP_ROOT, "compiler")


require 'polyglot' require 'polyglot'
Polyglot.register(Treetop::VALID_GRAMMAR_EXT, Treetop) Polyglot.register(Treetop::VALID_GRAMMAR_EXT, Treetop)
11 changes: 4 additions & 7 deletions lib/treetop/bootstrap_gen_1_metagrammar.rb
Expand Up @@ -2,28 +2,25 @@
# into the environment by compiling the current metagrammar.treetop using a trusted version of Treetop. # into the environment by compiling the current metagrammar.treetop using a trusted version of Treetop.


require 'rubygems' require 'rubygems'
dir = File.dirname(__FILE__)


TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP = '>= 1.1.5' TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP = '>= 1.1.5'


# Loading trusted version of Treetop to compile the compiler # Loading trusted version of Treetop to compile the compiler
gem_spec = Gem.source_index.find_name('treetop', TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP).last gem_spec = Gem.source_index.find_name('treetop', TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP).last
raise "Install a Treetop Gem version #{TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP} to bootstrap." unless gem_spec raise "Install a Treetop Gem version #{TREETOP_VERSION_REQUIRED_TO_BOOTSTRAP} to bootstrap." unless gem_spec
trusted_treetop_path = gem_spec.full_gem_path require "#{gem_spec.full_gem_path}/lib/treetop"
require File.join(trusted_treetop_path, 'lib', 'treetop')


# Relocating trusted version of Treetop to Trusted::Treetop # Relocating trusted version of Treetop to Trusted::Treetop
Trusted = Module.new Trusted = Module.new
Trusted::Treetop = Treetop Trusted::Treetop = Treetop
Object.send(:remove_const, :Treetop) Object.send(:remove_const, :Treetop)
Object.send(:remove_const, :TREETOP_ROOT)


# Requiring version of Treetop that is under test # Requiring version of Treetop that is under test
$exclude_metagrammar = true $exclude_metagrammar = true
require File.expand_path(File.join(dir, '..', 'treetop')) require File.expand_path('../treetop')


# Compile and evaluate freshly generated metagrammar source # Compile and evaluate freshly generated metagrammar source
METAGRAMMAR_PATH = File.join(TREETOP_ROOT, 'compiler', 'metagrammar.treetop') METAGRAMMAR_PATH = File.expand_path('../compiler/metagrammar.treetop', __FILE__)
compiled_metagrammar_source = Trusted::Treetop::Compiler::GrammarCompiler.new.ruby_source(METAGRAMMAR_PATH) compiled_metagrammar_source = Trusted::Treetop::Compiler::GrammarCompiler.new.ruby_source(METAGRAMMAR_PATH)
Object.class_eval(compiled_metagrammar_source) Object.class_eval(compiled_metagrammar_source)


Expand All @@ -42,4 +39,4 @@
# include Trusted::Treetop::Runtime # include Trusted::Treetop::Runtime
# end # end


$bootstrapped_gen_1_metagrammar = true $bootstrapped_gen_1_metagrammar = true
13 changes: 7 additions & 6 deletions lib/treetop/compiler.rb
@@ -1,6 +1,7 @@
dir = File.dirname(__FILE__) require 'treetop/ruby_extensions'
require File.join(dir, *%w[compiler lexical_address_space])
require File.join(dir, *%w[compiler ruby_builder]) require 'treetop/compiler/lexical_address_space'
require File.join(dir, *%w[compiler node_classes]) require 'treetop/compiler/ruby_builder'
require File.join(dir, *%w[compiler metagrammar]) unless defined?($exclude_metagrammar) require 'treetop/compiler/node_classes'
require File.join(dir, *%w[compiler grammar_compiler]) require 'treetop/compiler/metagrammar' unless defined?($exclude_metagrammar)
require 'treetop/compiler/grammar_compiler'
39 changes: 19 additions & 20 deletions lib/treetop/compiler/node_classes.rb
@@ -1,20 +1,19 @@
dir = File.dirname(__FILE__) require 'treetop/compiler/node_classes/parsing_expression'
require File.join(dir, *%w[node_classes parsing_expression]) require 'treetop/compiler/node_classes/atomic_expression'
require File.join(dir, *%w[node_classes atomic_expression]) require 'treetop/compiler/node_classes/inline_module'
require File.join(dir, *%w[node_classes inline_module]) require 'treetop/compiler/node_classes/predicate_block'
require File.join(dir, *%w[node_classes predicate_block]) require 'treetop/compiler/node_classes/treetop_file'
require File.join(dir, *%w[node_classes treetop_file]) require 'treetop/compiler/node_classes/grammar'
require File.join(dir, *%w[node_classes grammar]) require 'treetop/compiler/node_classes/declaration_sequence'
require File.join(dir, *%w[node_classes declaration_sequence]) require 'treetop/compiler/node_classes/parsing_rule'
require File.join(dir, *%w[node_classes parsing_rule]) require 'treetop/compiler/node_classes/parenthesized_expression'
require File.join(dir, *%w[node_classes parenthesized_expression]) require 'treetop/compiler/node_classes/nonterminal'
require File.join(dir, *%w[node_classes nonterminal]) require 'treetop/compiler/node_classes/terminal'
require File.join(dir, *%w[node_classes terminal]) require 'treetop/compiler/node_classes/anything_symbol'
require File.join(dir, *%w[node_classes anything_symbol]) require 'treetop/compiler/node_classes/character_class'
require File.join(dir, *%w[node_classes character_class]) require 'treetop/compiler/node_classes/sequence'
require File.join(dir, *%w[node_classes sequence]) require 'treetop/compiler/node_classes/choice'
require File.join(dir, *%w[node_classes choice]) require 'treetop/compiler/node_classes/repetition'
require File.join(dir, *%w[node_classes repetition]) require 'treetop/compiler/node_classes/optional'
require File.join(dir, *%w[node_classes optional]) require 'treetop/compiler/node_classes/predicate'
require File.join(dir, *%w[node_classes predicate]) require 'treetop/compiler/node_classes/transient_prefix'
require File.join(dir, *%w[node_classes transient_prefix])
3 changes: 1 addition & 2 deletions lib/treetop/ruby_extensions.rb
@@ -1,2 +1 @@
dir = File.dirname(__FILE__) require 'treetop/ruby_extensions/string'
require "#{dir}/ruby_extensions/string"
11 changes: 6 additions & 5 deletions lib/treetop/runtime.rb
@@ -1,5 +1,6 @@
dir = File.dirname(__FILE__) require 'treetop/ruby_extensions'
require "#{dir}/runtime/compiled_parser"
require "#{dir}/runtime/syntax_node" require 'treetop/runtime/compiled_parser'
require "#{dir}/runtime/terminal_parse_failure" require 'treetop/runtime/syntax_node'
require "#{dir}/runtime/interval_skip_list" require 'treetop/runtime/terminal_parse_failure'
require 'treetop/runtime/interval_skip_list'
7 changes: 3 additions & 4 deletions lib/treetop/runtime/interval_skip_list.rb
@@ -1,4 +1,3 @@
dir = File.dirname(__FILE__) require 'treetop/runtime/interval_skip_list/interval_skip_list'
require "#{dir}/interval_skip_list/interval_skip_list.rb" require 'treetop/runtime/interval_skip_list/head_node'
require "#{dir}/interval_skip_list/head_node.rb" require 'treetop/runtime/interval_skip_list/node'
require "#{dir}/interval_skip_list/node.rb"
7 changes: 3 additions & 4 deletions script/generate_metagrammar.rb
@@ -1,14 +1,13 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby


require 'rubygems' require 'rubygems'
dir = File.dirname(__FILE__) require File.expand_path('../../lib/treetop/bootstrap_gen_1_metagrammar', __FILE__)
require File.join(dir, '..', 'lib', 'treetop', 'bootstrap_gen_1_metagrammar')


GENERATED_METAGRAMMAR_PATH = File.join(TREETOP_ROOT, 'compiler', 'metagrammar.rb') GENERATED_METAGRAMMAR_PATH = File.expand_path('../../lib/treetop/compiler/metagrammar.rb')


File.open(METAGRAMMAR_PATH) do |source_file| File.open(METAGRAMMAR_PATH) do |source_file|
File.open(GENERATED_METAGRAMMAR_PATH, 'w') do |target_file| File.open(GENERATED_METAGRAMMAR_PATH, 'w') do |target_file|
generated_source = Treetop::Compiler::MetagrammarParser.new.parse(source_file.read).compile generated_source = Treetop::Compiler::MetagrammarParser.new.parse(source_file.read).compile
target_file.write(generated_source) target_file.write(generated_source)
end end
end end
2 changes: 1 addition & 1 deletion spec/compiler/circular_compilation_spec.rb
@@ -1,6 +1,6 @@
require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper") require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
BENCHMARK = false BENCHMARK = false
METAGRAMMAR_PATH = File.join(TREETOP_ROOT, 'compiler', 'metagrammar.treetop') METAGRAMMAR_PATH = File.expand_path('../../../lib/treetop/compiler/metagrammar.treetop', __FILE__)


module CircularCompilationSpec module CircularCompilationSpec
describe "a parser for the metagrammar" do describe "a parser for the metagrammar" do
Expand Down

0 comments on commit 471b670

Please sign in to comment.