fork download
  1. #!/usr/bin/env ruby
  2. # -*- coding: utf-8 -*-
  3.  
  4. require 'ripper'
  5. require 'pp'
  6.  
  7. a = 1
  8. b = 2
  9. x = "hi"
  10. y = "bye"
  11.  
  12. wrong = 'v = a<b?x:y'
  13. puts "まちがひ: #{wrong}"
  14. pp Ripper.tokenize wrong
  15. pp Ripper.lex wrong
  16.  
  17. puts
  18.  
  19. correct = 'v = a<b ? x : y'
  20. puts "せいかい: #{correct}"
  21. pp Ripper.tokenize correct
  22. pp Ripper.lex correct
  23.  
  24. puts
  25.  
  26. puts "eval: #{correct} #=> #{eval(correct).inspect}"
  27.  
Success #stdin #stdout 0.04s 5680KB
stdin
Standard input is empty
stdout
まちがひ: v = a<b?x:y
["v", " ", "=", " ", "a", "<", "b?", "x:", "y"]
[[[1, 0], :on_ident, "v"],
 [[1, 1], :on_sp, " "],
 [[1, 2], :on_op, "="],
 [[1, 3], :on_sp, " "],
 [[1, 4], :on_ident, "a"],
 [[1, 5], :on_op, "<"],
 [[1, 6], :on_ident, "b?"],
 [[1, 8], :on_label, "x:"],
 [[1, 10], :on_ident, "y"]]

せいかい: v = a<b ? x : y
["v", " ", "=", " ", "a", "<", "b", " ", "?", " ", "x", " ", ":", " ", "y"]
[[[1, 0], :on_ident, "v"],
 [[1, 1], :on_sp, " "],
 [[1, 2], :on_op, "="],
 [[1, 3], :on_sp, " "],
 [[1, 4], :on_ident, "a"],
 [[1, 5], :on_op, "<"],
 [[1, 6], :on_ident, "b"],
 [[1, 7], :on_sp, " "],
 [[1, 8], :on_op, "?"],
 [[1, 9], :on_sp, " "],
 [[1, 10], :on_ident, "x"],
 [[1, 11], :on_sp, " "],
 [[1, 12], :on_op, ":"],
 [[1, 13], :on_sp, " "],
 [[1, 14], :on_ident, "y"]]

eval: v = a<b ? x : y #=> "hi"