Module: SrlRuby
- Defined in:
- lib/srl_ruby.rb,
lib/srl_ruby/grammar.rb,
lib/srl_ruby/version.rb,
lib/srl_ruby/srl_token.rb,
lib/srl_ruby/tokenizer.rb,
lib/srl_ruby/ast_builder.rb
Overview
This module is used as a namespace
Defined Under Namespace
Classes: ASTBuilder, Position, SrlToken, Tokenizer
Constant Summary collapse
- Grammar =
And now build the grammar and make it accessible via a global constant
builder.grammar
- VERSION =
'0.2.2'.freeze
Class Method Summary collapse
-
.load_file(filename) ⇒ Regexp
Load the SRL expression contained in filename.
-
.parse(source) ⇒ Regexp
Parse the SRL expression into its Regexp equivalent.
Class Method Details
.load_file(filename) ⇒ Regexp
Load the SRL expression contained in filename. Returns an equivalent Regexp object.
11 12 13 14 15 16 17 |
# File 'lib/srl_ruby.rb', line 11 def self.load_file(filename) source = nil File.open(filename, 'r') { |f| source = f.read } return source if source.nil? || source.empty? return parse(source) end |
.parse(source) ⇒ Regexp
Parse the SRL expression into its Regexp equivalent.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/srl_ruby.rb', line 22 def self.parse(source) # Create a Rley facade object engine = Rley::Engine.new # Step 1. Load SRL grammar engine.use_grammar(SrlRuby::Grammar) lexer = SrlRuby::Tokenizer.new(source) result = engine.parse(lexer.tokens) unless result.success? # Stop if the parse failed... line1 = "Parsing failed\n" line2 = "Reason: #{result.failure_reason.}" raise StandardError, line1 + line2 end # Generate an abstract syntax tree (AST) from the parse result engine.configuration.repr_builder = SrlRuby::ASTBuilder ast_ptree = engine.convert(result) # Now output the regexp literal root = ast_ptree.root # puts root.to_str # TODO remove this line # pp root return Regexp.new(root.to_str) end |