rockit 0.7.1 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. data/README +24 -160
  2. data/TODO +17 -17
  3. data/VERSION +1 -1
  4. data/doc/rockit_paper.pdf +0 -0
  5. data/lib/packrat/grammar.rb +139 -84
  6. data/rakefile +27 -9
  7. data/tests/acceptance/packrat/java/atest_java.rb +37 -0
  8. data/tests/acceptance/packrat/java/java.rb +136 -0
  9. data/tests/acceptance/packrat/java/t.rb +10 -0
  10. data/tests/acceptance/packrat/java/todo +10 -0
  11. data/tests/acceptance/packrat/java/xtc.lang.java/Java.rats +446 -0
  12. data/tests/acceptance/packrat/java/xtc.lang.java/JavaConstant.rats +111 -0
  13. data/tests/acceptance/packrat/java/xtc.lang.java/JavaCore.rats +508 -0
  14. data/tests/acceptance/packrat/java/xtc.lang.java/JavaIdentifier.rats +62 -0
  15. data/tests/acceptance/packrat/java/xtc.lang.java/JavaSymbol.rats +38 -0
  16. data/tests/acceptance/packrat/java/xtc.lang.java/JavaTree.rats +40 -0
  17. data/tests/acceptance/packrat/java/xtc.lang.java/JavaType.rats +61 -0
  18. data/tests/acceptance/packrat/java/xtc.lang.java/Spacing.rats +36 -0
  19. data/tests/acceptance/packrat/java/xtc.lang.java/Symbol.rats +77 -0
  20. data/tests/acceptance/packrat/minibasic/README +13 -0
  21. data/tests/acceptance/packrat/minibasic/atest_minibasic.rb +151 -13
  22. data/tests/acceptance/packrat/minibasic/minibasic.rb +94 -76
  23. data/tests/acceptance/packrat/minibasic/mult3.basic +6 -0
  24. data/tests/acceptance/packrat/minibasic/sumeven.basic +19 -0
  25. data/tests/unit/packrat/test_ast.rb +116 -0
  26. data/tests/unit/packrat/test_interpreting_parser.rb +15 -55
  27. metadata +22 -59
  28. data/lib/rockit/prettyprint/box.rb +0 -60
  29. data/lib/rockit/prettyprint/renderer.rb +0 -41
  30. data/lib/rockit/prettyprint/text_renderer.rb +0 -47
  31. data/lib/rockit/tree/base.rb +0 -223
  32. data/lib/rockit/tree/enter_leave_visitor.rb +0 -12
  33. data/lib/rockit/tree/graphviz.rb +0 -69
  34. data/lib/rockit/tree/visitor.rb +0 -12
  35. data/lib/util/array_alternatives.rb +0 -20
  36. data/lib/util/enter_leave_visitor.rb +0 -69
  37. data/lib/util/graphviz_dot.rb +0 -182
  38. data/lib/util/string_location.rb +0 -42
  39. data/lib/util/visitor.rb +0 -49
  40. data/lib/util/visitor_combinators.rb +0 -14
  41. data/tests/acceptance/rockit/dparser/atest_any_operator.rb +0 -33
  42. data/tests/acceptance/rockit/dparser/atest_arithmetic_grammar.rb +0 -30
  43. data/tests/acceptance/rockit/dparser/atest_list_operator.rb +0 -57
  44. data/tests/acceptance/rockit/dparser/atest_mult_operator.rb +0 -60
  45. data/tests/acceptance/rockit/dparser/atest_operator_grammar.rb +0 -61
  46. data/tests/acceptance/rockit/dparser/atest_plus_operator.rb +0 -55
  47. data/tests/acceptance/rockit/dparser/atest_samples_calculator.rb +0 -14
  48. data/tests/acceptance/rockit/dparser/atest_samples_minibasic.rb +0 -20
  49. data/tests/acceptance/rockit/dparser/atest_samples_multifunccalculator.rb +0 -36
  50. data/tests/acceptance/rockit/dparser/atest_simple_grammar.rb +0 -34
  51. data/tests/acceptance/rockit/dparser/atest_speculative_code_action.rb +0 -128
  52. data/tests/acceptance/rockit/dparser/calc_tests_common.rb +0 -103
  53. data/tests/unit/parse/utest_ebnf_grammar.rb +0 -50
  54. data/tests/unit/parse/utest_expand_grammar.rb +0 -23
  55. data/tests/unit/parse/utest_grammar.rb +0 -160
  56. data/tests/unit/rockit/assembler/llvm/utest_instructions.rb +0 -41
  57. data/tests/unit/rockit/assembler/llvm/utest_module.rb +0 -19
  58. data/tests/unit/rockit/prettyprint/utest_box.rb +0 -44
  59. data/tests/unit/rockit/tree/utest_tree_base.rb +0 -301
  60. data/tests/unit/rockit/tree/utest_tree_enter_leave_visitor.rb +0 -69
  61. data/tests/unit/rockit/tree/utest_tree_visitor.rb +0 -63
  62. data/tests/unit/rockit/utest_grammar.rb +0 -145
  63. data/tests/unit/rockit/utest_grammar_symbol.rb +0 -11
  64. data/tests/unit/rockit/utest_maybe_operator.rb +0 -12
  65. data/tests/unit/rockit/utest_regexp_terminal.rb +0 -45
  66. data/tests/unit/rockit/utest_repetition_operators.rb +0 -35
  67. data/tests/unit/rockit/utest_rule.rb +0 -23
  68. data/tests/unit/rockit/utest_string_terminal.rb +0 -40
  69. data/tests/unit/util/utest_array_alternatives.rb +0 -23
  70. data/tests/unit/util/utest_enter_leave_visitor.rb +0 -89
  71. data/tests/unit/util/utest_string_location.rb +0 -42
  72. data/tests/unit/util/utest_visitor.rb +0 -92
  73. data/tests/unit/util/utest_visitor_combinators.rb +0 -64
@@ -34,52 +34,6 @@
34
34
  require 'packrat/grammar'
35
35
 
36
36
  module MiniBasic
37
- class Interpreter
38
- def initialize
39
- # For variables and their values. Default value is 0.
40
- @vars = Hash.new(0)
41
- end
42
-
43
- def eval(sexpr)
44
- case sexpr.first
45
- when :Statements
46
- sexpr.statements.each {|stmt| mb_eval(stmt)}
47
- when "If"
48
- if mb_eval(sexpr.condition) # What is true and false in basic?
49
- mb_eval(sexpr.statements)
50
- elsif sexpr.optelse
51
- mb_eval(sexpr.optelse[2])
52
- end
53
- when "For"
54
- for i in (mb_eval(sexpr.from)..mb_eval(sexpr.to))
55
- $vars[sexpr.ident.id] = i
56
- mb_eval(sexpr.statements)
57
- end
58
- when "Read"
59
- print "? "; STDOUT.flush
60
- $vars[sexpr.ident.id] = STDIN.gets.to_i # Error catching?!
61
- when "Print"
62
- print mb_eval(sexpr.message); STDOUT.flush
63
- when "PrintLn"
64
- print "\n"; STDOUT.flush
65
- when "Assignment"
66
- $vars[sexpr.ident.id] = mb_eval(sexpr.expression)
67
- when "Condition"
68
- map = {">" => :>, "<" => :<, "=" => :==}
69
- mb_eval(sexpr.left).send(map[sexpr.op], mb_eval(sexpr.right))
70
- when "BinExpr"
71
- map = {"+"=>:+, "-"=>:-, "*"=>:*, "/"=>"/".intern, "MOD"=>"%".intern }
72
- mb_eval(sexpr.left).send(map[sexpr.op], mb_eval(sexpr.right))
73
- when "String"
74
- sexpr.value[1..-2] # Skip leading and trailing double quotes
75
- when "Identifier"
76
- $vars[sexpr.id]
77
- when "Number"
78
- sexpr.lexeme.to_i
79
- end
80
- end
81
- end
82
-
83
37
  Grammar = Packrat::Grammar.new do
84
38
  start_symbol :Program
85
39
 
@@ -87,51 +41,115 @@ module MiniBasic
87
41
  S = hidden(/\s*/)
88
42
  FS = hidden(/\s\s*/)
89
43
 
90
- prod :Program, [S, :Statements, eos(), lift(0)]
44
+ prod :Program, [S, :Statements, eos(), lift(1)]
91
45
 
92
46
  prod :Statements, [plus(:Statement), lift(0)]
93
47
 
94
- rule :Statement, [
95
- ['IF', FS, :Condition, FS, 'THEN', FS,
96
- :Statements, FS,
97
- maybe(:OptElse), S,
98
- 'ENDIF', S, ast(:If)],
48
+ rule( :Statement,
49
+ ['IF', FS, :Condition, FS, 'THEN', FS,
50
+ :Statements, S,
51
+ maybe(:OptElse), S,
52
+ 'ENDIF', S, ast(:If)],
99
53
 
100
- ['FOR', FS, :Identifier, S, ':=', S, :Expr, FS, 'TO', FS, :Expr, S,
101
- :Statements, S,
102
- 'NEXT', S, ast(:For)],
54
+ ['FOR', FS, :Identifier, S, ':=', S, :Expr, FS, 'TO', FS, :Expr, S,
55
+ :Statements, S,
56
+ 'NEXT', S, ast(:For, :expr1 => :from, :expr2 => :to)],
103
57
 
104
- ['READ', FS, :Identifier, S, ast(:Read)],
58
+ ['READ', FS, :Identifier, S, ast(:Read)],
105
59
 
106
- ['PRINTLN', S, ast(:PrintLn)],
60
+ ['PRINTLN', S, ast(:PrintLn)],
107
61
 
108
- ['PRINT', FS, any(:Expr, :String), S, ast(:Print)],
62
+ ['PRINT', FS, any(:Expr, :String), S, ast(:Print)],
109
63
 
110
- [:Identifier, S, ':=', S, :Expr, S, ast(:Assign)],
111
- ]
64
+ [:Identifier, S, ':=', S, :Expr, S, ast(:Assign)]
65
+ )
112
66
 
113
- prod :OptElse, ['ELSE', FS, :Statements, lift(1)]
67
+ prod :OptElse, ['ELSE', FS, :Statements, lift(2)]
114
68
 
115
- prod :Condition, [:Expr, S, any('<', '>', '='), S, :Expr, ast(:Cond)]
69
+ prod :Condition, [:Expr, S, any('<', '>', '='), S, :Expr,
70
+ ast(:Cond, :expr1 => :left, :expr2 => :right)]
116
71
 
117
72
  # This is crude! No precedence levels or handling of associativity.
118
- rule :Expr, [
119
- [:BaseExpr, S, any('+', '-', '*', '/', 'MOD'), S, :BaseExpr,
120
- ast(:OpExpr)
121
- ],
122
- [:BaseExpr, lift(0)],
123
- ]
124
-
125
- rule :BaseExpr, [
126
- [:Number, lift(0)],
127
- [:Identifier, lift(0)],
128
- ['(', S, :Expr, S, ')', lift(2)],
129
- ]
130
-
131
- prod :String, [/"[^"]*"/, lift(0)]
73
+ rule( :Expr,
74
+ [:BaseExpr, S, any('+', '-', '*', '/', 'MOD'), S, :BaseExpr,
75
+ ast(:BinExpr, :base_expr1 => :left, :base_expr2 => :right)],
76
+ [:BaseExpr, lift(0)]
77
+ )
78
+
79
+ rule( :BaseExpr,
80
+ [:Number, lift(0)],
81
+ [:Identifier, lift(0)],
82
+ [:String, lift(0)],
83
+ ['(', S, :Expr, S, ')', lift(2)]
84
+ )
85
+
86
+ prod :String, ['"', /[^"]*/, '"', lift(1)] #"
132
87
  prod :Identifier, [/[A-Z]([A-Z0-9])*/, lift(0) {|r| r.intern}]
133
88
  prod :Number, [/[0-9]+/, lift(0) {|r| r.to_i}]
134
89
  end
135
90
 
136
91
  Parser = Grammar.interpreting_parser
92
+
93
+ class Interpreter
94
+ attr_reader :vars
95
+
96
+ def initialize(options = {})
97
+ # For variables and their values. Default value is 0.
98
+ @vars = Hash.new(0)
99
+ @stdout = options[:stdout] || STDOUT
100
+ @stdin = options[:stdin] || STDIN
101
+ end
102
+
103
+ include MiniBasic::Grammar::ASTs
104
+
105
+ def interpret_program(str)
106
+ ast = MiniBasic::Parser.parse_string(str)
107
+ interpret(ast)
108
+ end
109
+
110
+ def interpret(ast)
111
+ case ast
112
+ when Array
113
+ ast.each {|stmt| interpret(stmt)}
114
+ when If
115
+ if interpret(ast.condition) # What is true and false in basic?
116
+ interpret(ast.statements)
117
+ elsif ast[4]
118
+ interpret(ast[4])
119
+ end
120
+ when For
121
+ for i in (interpret(ast.from)..interpret(ast.to))
122
+ @vars[ast.identifier] = i
123
+ interpret(ast.statements)
124
+ end
125
+ when Read
126
+ @stdout.print "? "
127
+ @stdout.flush
128
+ @vars[ast.identifier] = @stdin.gets.to_i # Error catching?!
129
+ when Print
130
+ @stdout.print(interpret(ast[1]).to_s)
131
+ @stdout.flush
132
+ when PrintLn
133
+ @stdout.print "\n"
134
+ @stdout.flush
135
+ when Assign
136
+ @vars[ast.identifier] = interpret(ast.expr)
137
+ when Cond
138
+ map = {">" => :>, "<" => :<, "=" => :==}
139
+ interpret(ast.left).send(map[ast[1]], interpret(ast.right))
140
+ when BinExpr
141
+ map = {"+"=>:+, "-"=>:-, "*"=>:*, "/"=>"/".intern, "MOD"=>"%".intern }
142
+ interpret(ast.left).send(map[ast[1]], interpret(ast.right))
143
+ when Symbol
144
+ @vars[ast]
145
+ else
146
+ ast # Return the value itself
147
+ end
148
+ end
149
+ end
150
+ end
151
+
152
+ if $0 == __FILE__
153
+ prg = File.open(ARGV[0]) {|fh| fh.read}
154
+ MiniBasic::Interpreter.new.interpret_program(prg)
137
155
  end
@@ -0,0 +1,6 @@
1
+ PRINT "What is your number"
2
+ READ I
3
+ PRINT I
4
+ PRINT " * 3 = "
5
+ PRINT I * 3
6
+ PRINTLN
@@ -0,0 +1,19 @@
1
+ PRINT "I can sum even numbers."
2
+ PRINTLN
3
+ PRINT "At what number should I start summing"
4
+ READ START
5
+ PRINT "At what number should I stop"
6
+ READ STOP
7
+ SUM := 0
8
+ FOR I := START TO STOP
9
+ IF (I MOD 2) = 0 THEN
10
+ SUM := (SUM + I)
11
+ ENDIF
12
+ NEXT
13
+ PRINT "The sum of all even numbers between (inclusive) "
14
+ PRINT START
15
+ PRINT " and "
16
+ PRINT STOP
17
+ PRINT " is = "
18
+ PRINT SUM
19
+ PRINTLN
@@ -0,0 +1,116 @@
1
+ require 'test/unit'
2
+
3
+ require 'packrat/grammar'
4
+ include Packrat
5
+
6
+ class TestAST < Test::Unit::TestCase
7
+ def setup
8
+ @g1 = Packrat::Grammar.new do
9
+ start_symbol :s
10
+
11
+ s = hidden(/\s*/)
12
+ fs = hidden(/\s\s*/)
13
+
14
+ rule(:s,
15
+ ["P", ast(:P)],
16
+ ["S2a", :Num, :Num, ast(:S2a)],
17
+ ["S2b", :Num, :Num, ast(:S2b, :num1 => :n1)],
18
+ ["S2c", :Num, :Num, ast(:S2c, :num2 => :n2)],
19
+ ["S2d", :Num, :Num, ast(:S2d, :num1 => :n1, :num2 => :n2)],
20
+ ['FOR', fs, :Ident, s, ':=', s, :Expr, fs, 'TO', fs, :Expr, s,
21
+ :Statements, s,
22
+ 'NEXT', s, ast(:For, :expr1 => :from, :expr2 => :to)],
23
+ [:Num, lift(0)],
24
+ [:Id, lift(0)]
25
+ )
26
+
27
+ prod :Num, [/\d{1,2}/, ast(:Num)]
28
+ prod :Id, ["ID", :Num, maybe("?"), ast(:Id)]
29
+
30
+ prod :Statements, [plus(:s), lift(0)]
31
+ prod :Ident, [/[A-Z]([A-Z0-9])*/, lift(0) {|r| r.intern}]
32
+ prod :Expr, [any(:Num, :Ident), lift(0)]
33
+ end
34
+
35
+ @ip = @g1.interpreting_parser
36
+ @mAst = @g1::ASTs
37
+ end
38
+
39
+ def test_01_ast_module_and_classes_initialized_after_grammar_finalization
40
+ @g1.finalize!
41
+
42
+ assert(@g1.constants.include?("ASTs"))
43
+ assert_kind_of(Module, @mAst)
44
+
45
+ expected_ast_names = ["P", "Num", "Id", "For", "S2a", "S2b", "S2c", "S2d"]
46
+ assert_equal(expected_ast_names.sort, @mAst.constants.sort)
47
+ expected_ast_names.each do |exp_ast_name|
48
+ ast = @mAst.const_get(exp_ast_name)
49
+ assert(Packrat::AST, ast.superclass)
50
+ assert_kind_of(ast, ast[])
51
+ end
52
+
53
+ assert_equal(["P"], @mAst::P.sig)
54
+ assert_equal([nil], @mAst::Num.sig)
55
+ assert_equal(["ID", :num, nil], @mAst::Id.sig)
56
+ assert_equal(["S2a", :num1, :num2], @mAst::S2a.sig)
57
+ assert_equal(["S2b", :n1, :num2], @mAst::S2b.sig)
58
+ assert_equal(["S2c", :num1, :n2], @mAst::S2c.sig)
59
+ assert_equal(["S2d", :n1, :n2], @mAst::S2d.sig)
60
+ assert_equal(["FOR", :ident, ":=", :from, "TO", :to,
61
+ :statements, "NEXT"],
62
+ @mAst::For.sig)
63
+ end
64
+
65
+ def test_02_ast_parsing_no_nonconst_children
66
+ r = @ip.parse_string("P")
67
+ assert_equal(@mAst::P[], r)
68
+ assert_equal("P", r[0])
69
+ end
70
+
71
+ def test_03_ast_parsing_single_nonconst_child
72
+ r = @ip.parse_string("1")
73
+ assert_equal(@mAst::Num["1"], r)
74
+ assert_equal("1", r[0])
75
+ end
76
+
77
+ def test_04_ast_parsing_multi_mixed_children_default_naming
78
+ r = @ip.parse_string("ID10")
79
+ assert_equal('Id["ID", Num["10"], nil]', r.inspect)
80
+ assert_equal(@mAst::Id[@mAst::Num["10"]], r)
81
+ assert_equal(@mAst::Num["10"], r[1])
82
+ assert_equal("ID", r[0])
83
+ assert_equal("10", r[1][0])
84
+ assert_equal(nil, r[2])
85
+ assert_equal("10", r.num[0])
86
+ end
87
+
88
+ def test_05_multi_mixed_overlapping_symbol_names
89
+ r = @ip.parse_string("S2a112")
90
+ assert_equal(@mAst::S2a[@mAst::Num["11"], @mAst::Num["2"]], r)
91
+ assert_equal(@mAst::Num["11"], r[1])
92
+ assert_equal(@mAst::Num["2"], r[2])
93
+ assert_equal(@mAst::Num["11"], r.num1)
94
+ assert_equal(@mAst::Num["2"], r.num2)
95
+ end
96
+
97
+ def test_06_multi_mixed_overlapping_symbol_names_with_override
98
+ r = @ip.parse_string("S2b1134")
99
+ assert_equal(@mAst::Num["11"], r.n1)
100
+ assert_equal(@mAst::Num["34"], r.num2)
101
+
102
+ r = @ip.parse_string("S2c1134")
103
+ assert_equal(@mAst::Num["11"], r.num1)
104
+ assert_equal(@mAst::Num["34"], r.n2)
105
+
106
+ r = @ip.parse_string("S2d7465")
107
+ assert_equal(@mAst::Num["74"], r.n1)
108
+ assert_equal(@mAst::Num["65"], r.n2)
109
+ end
110
+
111
+ def test_07_complex_ast_parsing
112
+ r = @ip.parse_string("FOR A := 1 TO 3 P NEXT")
113
+ assert_equal(@mAst::For[:A, @mAst::Num["1"], @mAst::Num["3"],
114
+ [@mAst::P[]]], r)
115
+ end
116
+ end
@@ -40,10 +40,10 @@ class TestInterpretingParser < Test::Unit::TestCase
40
40
  def test_03_grammar_with_single_rule_with_multi_prods
41
41
  g = Packrat::Grammar.new do
42
42
  start_symbol :s
43
- rule :s, [
44
- [/a+/, /b+/, /dc*/],
45
- [/a+/, /d+/]
46
- ]
43
+ rule(:s,
44
+ [/a+/, /b+/, /dc*/],
45
+ [/a+/, /d+/]
46
+ )
47
47
  end
48
48
  ip = g.interpreting_parser
49
49
 
@@ -60,10 +60,10 @@ class TestInterpretingParser < Test::Unit::TestCase
60
60
  def test_04_grammar_with_single_rule_and_ref_to_one_external_prod
61
61
  g = Packrat::Grammar.new do
62
62
  start_symbol :s
63
- rule :s, [
64
- [:a, /b+/, /dc*/],
65
- [:a, /d+/]
66
- ]
63
+ rule( :s,
64
+ [:a, /b+/, /dc*/],
65
+ [:a, /d+/]
66
+ )
67
67
  prod :a, [/a+/]
68
68
  end
69
69
  ip = g.interpreting_parser
@@ -81,13 +81,13 @@ class TestInterpretingParser < Test::Unit::TestCase
81
81
  def test_05_grammar_with_multi_rules
82
82
  g = Packrat::Grammar.new do
83
83
  start_symbol :Constant
84
- rule :Constant, [
85
- [:DecimalInt],
86
- [:HexInt],
87
- [:OctalInt],
88
- ]
89
- rule :DecimalInt, [[/[1-9][0-9]*[uUlL]?/]]
90
- rule :HexInt, [[/(0x|0X)[0-9a-fA-F]+[uUlL]?/]]
84
+ rule( :Constant,
85
+ [:DecimalInt],
86
+ [:HexInt],
87
+ [:OctalInt]
88
+ )
89
+ rule :DecimalInt, [/[1-9][0-9]*[uUlL]?/]
90
+ rule :HexInt, [/(0x|0X)[0-9a-fA-F]+[uUlL]?/]
91
91
  prod :OctalInt, [/0[0-7]*[uUlL]?/]
92
92
  end
93
93
  ip = g.interpreting_parser
@@ -253,44 +253,4 @@ class TestInterpretingParser < Test::Unit::TestCase
253
253
  r = ip.parse_string("7/18")
254
254
  assert_equal([:s, "7", "/", "18"], r)
255
255
  end
256
-
257
- def test_14_ast
258
- g = Packrat::Grammar.new do
259
- start_symbol :s
260
- rule :s, [
261
- [:Num, lift(0)],
262
- [:Id, lift(0)],
263
- ]
264
- prod :Num, [/\d+/, ast(:Num)]
265
- prod :Id, ["ID", :Num, maybe("?"), ast(:Id)]
266
- end
267
- ip = g.interpreting_parser
268
-
269
- mAst = g::ASTs
270
- assert_kind_of(Module, mAst)
271
-
272
- r = ip.parse_string("1")
273
-
274
- # The AST classes are added during the parse so now we can see
275
- # that they are there.
276
- assert_kind_of(Class, mAst.const_get("Num"))
277
- assert(mAst::Num.ancestors.include?(Packrat::AST))
278
-
279
- as = mAst::Num[]
280
- assert_kind_of(mAst::Num, as)
281
-
282
- assert_kind_of(Packrat::AST, r)
283
- assert_equal('Num["1"]', r.inspect)
284
- assert_equal("1", r[0])
285
-
286
- r = ip.parse_string("ID10")
287
- assert_kind_of(Class, mAst.const_get("Id"))
288
- assert(mAst::Id.ancestors.include?(Packrat::AST))
289
- assert_kind_of(Packrat::AST, r)
290
- assert_equal('Id["ID", Num["10"], nil]', r.inspect)
291
- assert_equal("ID", r[0])
292
- assert_equal("10", r[1][0])
293
- assert_equal(nil, r[2])
294
- assert_equal("10", r.num[0])
295
- end
296
256
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: rockit
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.7.1
7
- date: 2006-03-23 00:00:00 +01:00
6
+ version: 0.7.2
7
+ date: 2006-03-27 00:00:00 +02:00
8
8
  summary: Rockit is the Ruby Object-oriented Compiler construction toolKIT
9
9
  require_paths:
10
10
  - lib
@@ -35,67 +35,30 @@ files:
35
35
  - VERSION
36
36
  - rakefile
37
37
  - lib/packrat/grammar.rb
38
- - lib/rockit/prettyprint/text_renderer.rb
39
- - lib/rockit/prettyprint/renderer.rb
40
- - lib/rockit/prettyprint/box.rb
41
- - lib/rockit/tree/visitor.rb
42
- - lib/rockit/tree/base.rb
43
- - lib/rockit/tree/graphviz.rb
44
- - lib/rockit/tree/enter_leave_visitor.rb
45
- - lib/util/array_alternatives.rb
46
- - lib/util/string_location.rb
47
- - lib/util/graphviz_dot.rb
48
- - lib/util/visitor.rb
49
- - lib/util/visitor_combinators.rb
50
- - lib/util/enter_leave_visitor.rb
51
- - tests/acceptance/rockit
52
- - tests/acceptance/packrat
53
- - tests/acceptance/rockit/dparser
54
- - tests/acceptance/rockit/dparser/atest_speculative_code_action.rb
55
- - tests/acceptance/rockit/dparser/atest_samples_calculator.rb
56
- - tests/acceptance/rockit/dparser/atest_plus_operator.rb
57
- - tests/acceptance/rockit/dparser/atest_arithmetic_grammar.rb
58
- - tests/acceptance/rockit/dparser/atest_simple_grammar.rb
59
- - tests/acceptance/rockit/dparser/atest_operator_grammar.rb
60
- - tests/acceptance/rockit/dparser/atest_any_operator.rb
61
- - tests/acceptance/rockit/dparser/atest_samples_minibasic.rb
62
- - tests/acceptance/rockit/dparser/atest_list_operator.rb
63
- - tests/acceptance/rockit/dparser/atest_samples_multifunccalculator.rb
64
- - tests/acceptance/rockit/dparser/atest_mult_operator.rb
65
- - tests/acceptance/rockit/dparser/calc_tests_common.rb
38
+ - doc/rockit_paper.pdf
66
39
  - tests/acceptance/packrat/minibasic
40
+ - tests/acceptance/packrat/java
67
41
  - tests/acceptance/packrat/minibasic/minibasic.rb
42
+ - tests/acceptance/packrat/minibasic/mult3.basic
68
43
  - tests/acceptance/packrat/minibasic/atest_minibasic.rb
69
- - tests/unit/rockit
70
- - tests/unit/util
71
- - tests/unit/parse
72
- - tests/unit/packrat
73
- - tests/unit/rockit/tree
74
- - tests/unit/rockit/prettyprint
75
- - tests/unit/rockit/utest_grammar_symbol.rb
76
- - tests/unit/rockit/utest_string_terminal.rb
77
- - tests/unit/rockit/utest_repetition_operators.rb
78
- - tests/unit/rockit/utest_regexp_terminal.rb
79
- - tests/unit/rockit/utest_grammar.rb
80
- - tests/unit/rockit/utest_rule.rb
81
- - tests/unit/rockit/utest_maybe_operator.rb
82
- - tests/unit/rockit/assembler
83
- - tests/unit/rockit/tree/utest_tree_visitor.rb
84
- - tests/unit/rockit/tree/utest_tree_base.rb
85
- - tests/unit/rockit/tree/utest_tree_enter_leave_visitor.rb
86
- - tests/unit/rockit/prettyprint/utest_box.rb
87
- - tests/unit/rockit/assembler/llvm
88
- - tests/unit/rockit/assembler/llvm/utest_instructions.rb
89
- - tests/unit/rockit/assembler/llvm/utest_module.rb
90
- - tests/unit/util/utest_array_alternatives.rb
91
- - tests/unit/util/utest_string_location.rb
92
- - tests/unit/util/utest_visitor.rb
93
- - tests/unit/util/utest_visitor_combinators.rb
94
- - tests/unit/util/utest_enter_leave_visitor.rb
95
- - tests/unit/parse/utest_grammar.rb
96
- - tests/unit/parse/utest_expand_grammar.rb
97
- - tests/unit/parse/utest_ebnf_grammar.rb
44
+ - tests/acceptance/packrat/minibasic/README
45
+ - tests/acceptance/packrat/minibasic/sumeven.basic
46
+ - tests/acceptance/packrat/java/xtc.lang.java
47
+ - tests/acceptance/packrat/java/java.rb
48
+ - tests/acceptance/packrat/java/todo
49
+ - tests/acceptance/packrat/java/atest_java.rb
50
+ - tests/acceptance/packrat/java/t.rb
51
+ - tests/acceptance/packrat/java/xtc.lang.java/JavaConstant.rats
52
+ - tests/acceptance/packrat/java/xtc.lang.java/JavaCore.rats
53
+ - tests/acceptance/packrat/java/xtc.lang.java/JavaIdentifier.rats
54
+ - tests/acceptance/packrat/java/xtc.lang.java/Spacing.rats
55
+ - tests/acceptance/packrat/java/xtc.lang.java/Java.rats
56
+ - tests/acceptance/packrat/java/xtc.lang.java/JavaSymbol.rats
57
+ - tests/acceptance/packrat/java/xtc.lang.java/Symbol.rats
58
+ - tests/acceptance/packrat/java/xtc.lang.java/JavaTree.rats
59
+ - tests/acceptance/packrat/java/xtc.lang.java/JavaType.rats
98
60
  - tests/unit/packrat/test_interpreting_parser.rb
61
+ - tests/unit/packrat/test_ast.rb
99
62
  test_files: []
100
63
 
101
64
  rdoc_options: []