Class: AstPrinter
- Inherits:
-
Object
- Object
- AstPrinter
- Defined in:
- lib/baba/ast_printer.rb
Instance Method Summary collapse
- #parenthesize(name, *exprs) ⇒ Object
- #print(expr) ⇒ Object
- #visit_binary_expr(expr) ⇒ Object
- #visit_grouping_expr(expr) ⇒ Object
- #visit_literal_expr(expr) ⇒ Object
- #visit_unary_expr(expr) ⇒ Object
Instance Method Details
#parenthesize(name, *exprs) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/baba/ast_printer.rb', line 27 def parenthesize(name, *exprs) builder = "" builder += "(#{name}" exprs.each do |expr| builder += " #{expr.accept(self)}" end builder += ")" end |
#print(expr) ⇒ Object
6 7 8 |
# File 'lib/baba/ast_printer.rb', line 6 def print(expr) expr.accept(self) end |
#visit_binary_expr(expr) ⇒ Object
10 11 12 |
# File 'lib/baba/ast_printer.rb', line 10 def visit_binary_expr(expr) parenthesize(expr.operator.lexeme, expr.left, expr.right) end |
#visit_grouping_expr(expr) ⇒ Object
14 15 16 |
# File 'lib/baba/ast_printer.rb', line 14 def visit_grouping_expr(expr) parenthesize("group", expr.expression) end |
#visit_literal_expr(expr) ⇒ Object
18 19 20 21 |
# File 'lib/baba/ast_printer.rb', line 18 def visit_literal_expr(expr) return "nil" if expr.value.nil? expr.value.to_s end |
#visit_unary_expr(expr) ⇒ Object
23 24 25 |
# File 'lib/baba/ast_printer.rb', line 23 def visit_unary_expr(expr) parenthesize(expr.operator.lexeme, expr.right) end |