From 6ac116c169cf2f0c795fd0fbc10424f7fafd70e7 Mon Sep 17 00:00:00 2001 From: hellerve Date: Tue, 24 Jul 2018 15:30:43 +0200 Subject: [PATCH] chapter 5 --- main.rb | 1 + rlox/expression.rb | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 rlox/expression.rb diff --git a/main.rb b/main.rb index b9d0042..6f07e66 100644 --- a/main.rb +++ b/main.rb @@ -2,6 +2,7 @@ require './rlox/prompt' require './rlox/file' +require './rlox/expression' case ARGV.length when 0 then prompt diff --git a/rlox/expression.rb b/rlox/expression.rb new file mode 100644 index 0000000..e05ac98 --- /dev/null +++ b/rlox/expression.rb @@ -0,0 +1,32 @@ +def parenthesize(name, *exprs) + res = "(#{name}" + + exprs.each { | expr | + res << " " + res << expr.dbg + } + res << ")" + + res +end + +Binary = Struct.new(:left, :operator, :right) do + def dbg() + parenthesize(operator.lexeme, left, right) + end +end +Grouping = Struct.new(:expression) do + def dbg() + parenthesize("group", expression) + end +end +Literal = Struct.new(:value) do + def dbg() + value.to_s + end +end +Unary = Struct.new(:operator, :right) do + def dbg() + parenthesize(operator.lexeme, right) + end +end