code_junkie

Learning Treetop

Nov 14th, 2011
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. grammar SimpleTest
  2.  
  3. rule num
  4. (float / integer)
  5. end
  6.  
  7. rule float
  8. (
  9. (( '+' / '-')? plain_digits '.' plain_digits) /
  10. (( '+' / '-')? plain_digits ('E' / 'e') plain_digits ) /
  11. (( '+' / '-')? plain_digits '.') /
  12. (( '+' / '-')? '.' plain_digits)
  13. ) {
  14. def eval
  15. text_value.to_f
  16. end
  17. }
  18. end
  19.  
  20. rule integer
  21. (( '+' / '-' )? plain_digits) {
  22. def eval
  23. text_value.to_i
  24. end
  25. }
  26. end
  27.  
  28. rule plain_digits
  29. [0-9] [0-9]*
  30. end
  31.  
  32. end
  33.  
  34. assert_equal @parser.parse('3.14').eval,3.14
  35.  
  36. assert_equal @parser.parse('3').eval,3
  37.  
  38. SyntaxNode+Float4+Float0 offset=0, "3.14" (eval,plain_digits):
  39. SyntaxNode offset=0, ""
  40. SyntaxNode+PlainDigits0 offset=0, "3":
  41. SyntaxNode offset=0, "3"
  42. SyntaxNode offset=1, ""
  43. SyntaxNode offset=1, "."
  44. SyntaxNode+PlainDigits0 offset=2, "14":
  45. SyntaxNode offset=2, "1"
  46. SyntaxNode offset=3, "4":
  47. SyntaxNode offset=3, "4"
  48.  
  49. SyntaxNode+Integer0 offset=0, "3" (plain_digits):
  50. SyntaxNode offset=0, ""
  51. SyntaxNode+PlainDigits0 offset=0, "3":
  52. SyntaxNode offset=0, "3"
  53. SyntaxNode offset=1, ""
  54.  
  55. rule integer
  56. ( '+' / '-' )? plain_digits
  57. {
  58. def eval
  59. text_value.to_i
  60. end
  61. }
  62. end
  63.  
  64. rule num
  65. (float / integer)
  66. end
  67.  
  68. rule num
  69. (float / integer)
  70. {
  71. def eval
  72. text_value.to_f
  73. end
  74. }
  75. end
Add Comment
Please, Sign In to add comment