examples/general/calc_iter2/spec/calculator_spec.rb in rley-0.5.14 vs examples/general/calc_iter2/spec/calculator_spec.rb in rley-0.6.00

- old
+ new

@@ -1,20 +1,32 @@ require 'rspec' # Use the RSpec framework -require_relative '../calc_parser' # Load the class under test +require_relative '../calc_lexer' +require_relative '../calc_grammar' require_relative '../calc_ast_builder' RSpec.configure do |config| # Display stack trace in case of failure config.full_backtrace = true end describe 'Calculator' do - def parse_expression(anExpression) - # Create a calculator parser object - parser = CalcParser.new - result = parser.parse_expression(anExpression) + def expect_expr(anExpression) + # Create a Rley facade object + engine = Rley::Engine.new do |cfg| + cfg.repr_builder = CalcASTBuilder + end + + engine.use_grammar(CalcGrammar) + raw_result = parse_expression(engine, anExpression) + ast = engine.to_ptree(raw_result) + return expect(ast.root.interpret) + end + + def parse_expression(anEngine, anExpression) + lexer = CalcLexer.new(anExpression) + result = anEngine.parse(lexer.tokens) unless result.success? # Stop if the parse failed... puts "Parsing of '#{anExpression}' failed" puts "Reason: #{result.failure_reason.message}" @@ -22,35 +34,10 @@ end return result end - def print_cst(aParseResult) - # Generate a parse tree from the parse result - ptree = aParseResult.parse_tree - - # Let's create a parse tree visitor - visitor = Rley::ParseTreeVisitor.new(ptree) - - # Now output formatted parse tree - renderer = Rley::Formatter::Asciitree.new($stdout) - renderer.render(visitor) - end - - def build_ast(aParseResult) - tree_builder = CalcASTBuilder - # Generate an abstract syntax tree from the parse result - ast = aParseResult.parse_tree(tree_builder) - return ast.root - end - - def expect_expr(anExpression) - parsing = parse_expression(anExpression) - ast = build_ast(parsing) - return expect(ast.interpret) - end - context 'Parsing valid expressions' do it 'should evaluate simple integer literals' do expect_expr('2').to eq(2) end @@ -141,10 +128,10 @@ it 'should evaluate negative exponent' do expect_expr('5 ** -2').to eq(0.04) end it 'should handle nested exponentiations' do - expect_expr('2 ** 2**2)').to eq(16) + expect_expr('2 ** 2**2').to eq(16) end it 'should change sign of expression in parentheses' do expect_expr('- (2 * 5)').to eq(-10) end