chapter 5
This commit is contained in:
1
main.rb
1
main.rb
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
require './rlox/prompt'
|
require './rlox/prompt'
|
||||||
require './rlox/file'
|
require './rlox/file'
|
||||||
|
require './rlox/expression'
|
||||||
|
|
||||||
case ARGV.length
|
case ARGV.length
|
||||||
when 0 then prompt
|
when 0 then prompt
|
||||||
|
32
rlox/expression.rb
Normal file
32
rlox/expression.rb
Normal file
@@ -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
|
Reference in New Issue
Block a user