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
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 [Rley::Syntax::Grammar]
builder.grammar
- VERSION =
'0.4.3'.freeze
Class Method Summary collapse
-
.load_file(filename) ⇒ Regexp
Compile the SRL expression in given filename into a Regexp object.
-
.parse(source) ⇒ Regexp
Compile the given SRL expression into its Regexp equivalent.
Class Method Details
.load_file(filename) ⇒ Regexp
Compile the SRL expression in given filename into a Regexp object.
10 11 12 13 14 15 16 |
# File 'lib/srl_ruby.rb', line 10 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
Compile the given SRL expression into its Regexp equivalent.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/srl_ruby.rb', line 29 def self.parse(source) # Create a Rley facade object engine = Rley::Engine.new { |cfg| cfg.diagnose = true } # 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 = root.is_a?(Regex::MatchOption) ? root.combine_opts : nil return Regexp.new(root.to_str, ) end |