Sha256: 3fd686f799f2e545de49feb83f3864bec1d843704c5dc993be6083412f8534bc
Contents?: true
Size: 1.17 KB
Versions: 3
Compression:
Stored size: 1.17 KB
Contents
# Load the builder class require_relative '../../../lib/rley/syntax/grammar_builder' require_relative '../../../lib/rley/parser/token' module GrammarAmbig01Helper ######################################## # Factory method. Define a grammar for a very simple language # Grammar 3: An ambiguous arithmetic expression language # (based on example in article on Earley's algorithm in Wikipedia) def grammar_ambig01_builder() builder = Rley::Syntax::GrammarBuilder.new do add_terminals('integer', '+', '*') rule 'P' => 'S' rule 'S' => %w(S + S) rule 'S' => %w(S * S) rule 'S' => 'L' rule 'L' => 'integer' end builder end # Highly simplified tokenizer implementation. def tokenizer_ambig01(aText, aGrammar) tokens = aText.scan(/\S+/).map do |lexeme| case lexeme when '+', '*' terminal = aGrammar.name2symbol[lexeme] when /^[-+]?\d+$/ terminal = aGrammar.name2symbol['integer'] else msg = "Unknown input text '#{lexeme}'" raise StandardError, msg end Rley::Parser::Token.new(lexeme, terminal) end return tokens end end # module # End of file
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rley-0.4.01 | spec/rley/support/grammar_ambig01_helper.rb |
rley-0.4.00 | spec/rley/support/grammar_ambig01_helper.rb |
rley-0.3.12 | spec/rley/support/grammar_ambig01_helper.rb |