Module: SrlRuby

Defined in:
lib/srl_ruby.rb,
lib/srl_ruby/grammar.rb,
lib/srl_ruby/version.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, Tokenizer

Constant Summary collapse

Grammar =

And now build the grammar and make it accessible via a global constant

builder.grammar
VERSION =
'0.1.0'.freeze

Class Method Summary collapse

Class Method Details

.load_file(filename) ⇒ Object

Load the SRL expression contained in filename. Returns the literal regular expression representation as a Ruby String.

Parameters:

  • filename (String)

    file name to parse.



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) ⇒ Object

Parse the SRL expression into its literal regexp and return it.

Parameters:

  • source (String)

    the SRL source to parse and convert.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/srl_ruby.rb', line 21

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 of '#{source}' failed\n"
    line2 = "Reason: #{result.failure_reason.message}"
    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
  return root.to_str
end