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
-
.load_file(filename) ⇒ Object
Load the SRL expression contained in filename.
-
.parse(source) ⇒ Object
Parse the SRL expression into its literal regexp and return it.
Class Method Details
.load_file(filename) ⇒ Object
Load the SRL expression contained in filename. Returns the literal regular expression representation as a Ruby String.
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.
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.}" 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 |