Sha256: 38344f4a58b620eed4244e6e5d5fa79f04b1d0d9d7c097c7e9511a38a35c7e0e

Contents?: true

Size: 1.04 KB

Versions: 6

Compression:

Stored size: 1.04 KB

Contents

require_relative 'calc_lexer'
require_relative 'calc_ast_builder'

# Retrieve input expression to parse from command-line
if ARGV.empty?
  my_name = File.basename(__FILE__)
  msg = <<-END_MSG
Command-line syntax:
  ruby #{my_name} "arithmetic expression"
  where:
    the arithmetic expression is enclosed between double quotes (")

  Example:
  ruby #{my_name} "2 * 3 + (1 + 3 ** 2)"
END_MSG
  puts msg
  exit(1)
end

# Create a Rley facade object
engine = Rley::Engine.new do |cfg|
  cfg.repr_builder = CalcASTBuilder
end

########################################
# Step 1. Load a grammar for calculator
require_relative 'calc_grammar'
engine.use_grammar(CalcGrammar)


lexer = CalcLexer.new(ARGV[0])
result = engine.parse(lexer.tokens)

unless result.success?
  # Stop if the parse failed...
  puts "Parsing of '#{ARGV[0]}' failed"
  puts "Reason: #{result.failure_reason.message}"
  exit(1)
end


# Generate a parse tree from the parse result
ptree = engine.to_ptree(result)

root = ptree.root
puts root.interpret # Output the expression result
# End of file

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rley-0.6.05 examples/general/calc_iter1/calc_demo.rb
rley-0.6.04 examples/general/calc_iter1/calc_demo.rb
rley-0.6.03 examples/general/calc_iter1/calc_demo.rb
rley-0.6.02 examples/general/calc_iter1/calc_demo.rb
rley-0.6.01 examples/general/calc_iter1/calc_demo.rb
rley-0.6.00 examples/general/calc_iter1/calc_demo.rb