antlr3 1.2.4 → 1.3.0

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.
@@ -26,7 +26,7 @@ class TestTreeNodeStream < Test::Unit::TestCase
26
26
 
27
27
  found.should == expecting
28
28
 
29
- expecting = '101'
29
+ expecting = '<UNKNOWN: 101>'
30
30
  found = stream.inspect
31
31
 
32
32
  found.should == expecting
@@ -68,7 +68,7 @@ class TestTreeNodeStream < Test::Unit::TestCase
68
68
  found = nodes_only_string(stream)
69
69
  found.should == expecting
70
70
 
71
- expecting = "101 2 102 2 103 3 104 3"
71
+ expecting = "<UNKNOWN: 101> <DOWN> <UNKNOWN: 102> <DOWN> <UNKNOWN: 103> <UP> <UNKNOWN: 104> <UP>"
72
72
  found = stream.inspect
73
73
  found.should == expecting
74
74
  end
@@ -91,7 +91,7 @@ class TestTreeNodeStream < Test::Unit::TestCase
91
91
  found = nodes_only_string(stream)
92
92
  found.should == expecting
93
93
 
94
- expecting = "101 2 102 2 103 3 104 3 105"
94
+ expecting = "<UNKNOWN: 101> <DOWN> <UNKNOWN: 102> <DOWN> <UNKNOWN: 103> <UP> <UNKNOWN: 104> <UP> <UNKNOWN: 105>"
95
95
  found = stream.inspect
96
96
  found.should == expecting
97
97
  end
@@ -103,13 +103,13 @@ class TestTreeNodeStream < Test::Unit::TestCase
103
103
  root.add_child(CommonTree.new(CommonToken[102]))
104
104
  root.add_child(CommonTree.new(CommonToken[103]))
105
105
 
106
- stream = CommonTreeNodeStream.new(root)
106
+ stream = CommonTreeNodeStream.new( root )
107
107
 
108
108
  expecting = '101 102 103'
109
109
  found = nodes_only_string(stream)
110
110
  found.should == expecting
111
111
 
112
- expecting = '101 102 103'
112
+ expecting = '<UNKNOWN: 101> <UNKNOWN: 102> <UNKNOWN: 103>'
113
113
  found = stream.inspect
114
114
  found.should == expecting
115
115
  end
@@ -125,7 +125,7 @@ class TestTreeNodeStream < Test::Unit::TestCase
125
125
  found = nodes_only_string(stream)
126
126
  found.should == expecting
127
127
 
128
- expecting = '101'
128
+ expecting = "<UNKNOWN: 101>"
129
129
  found = stream.inspect
130
130
  found.should == expecting
131
131
  end
@@ -139,7 +139,7 @@ class TestTreeNodeStream < Test::Unit::TestCase
139
139
  found = nodes_only_string(stream)
140
140
  found.should == expecting
141
141
 
142
- expecting = '101 2 102 3'
142
+ expecting = '<UNKNOWN: 101> <DOWN> <UNKNOWN: 102> <UP>'
143
143
  found = stream.inspect
144
144
  found.should == expecting
145
145
  end
@@ -335,7 +335,9 @@ class TestCommonTreeNodeStream < Test::Unit::TestCase
335
335
  r0.add_child new_node( new_token 109 )
336
336
 
337
337
  stream = CommonTreeNodeStream.new(r0)
338
- expecting = '101 2 102 2 103 3 104 2 105 3 106 2 107 3 108 109 3'
338
+ expecting = '<UNKNOWN: 101> <DOWN> <UNKNOWN: 102> <DOWN> <UNKNOWN: 103> <UP> <UNKNOWN: 104> ' +
339
+ '<DOWN> <UNKNOWN: 105> <UP> <UNKNOWN: 106> <DOWN> <UNKNOWN: 107> <UP> ' +
340
+ '<UNKNOWN: 108> <UNKNOWN: 109> <UP>'
339
341
  found = stream.inspect
340
342
  found.should == expecting
341
343
 
@@ -557,10 +559,10 @@ class TestCommonTree < Test::Unit::TestCase
557
559
  r0.add_child( new_node( new_token 104 ) )
558
560
  r0.add_child( new_node( new_token 105 ) )
559
561
 
560
- dup = @adaptor.copy_tree(r0)
562
+ dup = @adaptor.copy_tree( r0 )
561
563
  assert_nil dup.parent
562
564
  dup.child_index.should == -1
563
- dup.sanity_check_parent_and_child_indexes
565
+ dup.sanity_check
564
566
  end
565
567
 
566
568
  def test_become_root
@@ -572,7 +574,7 @@ class TestCommonTree < Test::Unit::TestCase
572
574
  old_root.add_child( new_node( new_token 103 ) )
573
575
 
574
576
  @adaptor.become_root(new_root, old_root)
575
- new_root.sanity_check_parent_and_child_indexes
577
+ new_root.sanity_check
576
578
  end
577
579
 
578
580
  def test_become_root2
@@ -583,7 +585,7 @@ class TestCommonTree < Test::Unit::TestCase
583
585
  old_root.add_child( new_node( new_token 103 ) )
584
586
 
585
587
  @adaptor.become_root(new_root, old_root)
586
- new_root.sanity_check_parent_and_child_indexes
588
+ new_root.sanity_check
587
589
  end
588
590
 
589
591
  def test_become_root3
@@ -596,7 +598,7 @@ class TestCommonTree < Test::Unit::TestCase
596
598
  old_root.add_child( new_node( new_token 103 ) )
597
599
 
598
600
  @adaptor.become_root(new_root, old_root)
599
- new_root.sanity_check_parent_and_child_indexes
601
+ new_root.sanity_check
600
602
  end
601
603
 
602
604
  def test_become_root5
@@ -608,7 +610,7 @@ class TestCommonTree < Test::Unit::TestCase
608
610
  old_root.add_child( new_node( new_token 103 ) )
609
611
 
610
612
  @adaptor.become_root(new_root, old_root)
611
- new_root.sanity_check_parent_and_child_indexes
613
+ new_root.sanity_check
612
614
  end
613
615
 
614
616
  def test_become_root6
@@ -618,7 +620,7 @@ class TestCommonTree < Test::Unit::TestCase
618
620
 
619
621
  @adaptor.add_child( root_1, new_node( new_token 6 ) )
620
622
  @adaptor.add_child( root_0, root_1 )
621
- root_0.sanity_check_parent_and_child_indexes
623
+ root_0.sanity_check
622
624
  end
623
625
 
624
626
  def test_replace_with_no_children
@@ -638,8 +640,8 @@ class TestCommonTree < Test::Unit::TestCase
638
640
  new_child = new_node( new_token 99, :text => 'c' )
639
641
  t.replace_children(0,0,new_child)
640
642
 
641
- t.to_string_tree.should == '(a c)'
642
- t.sanity_check_parent_and_child_indexes
643
+ t.inspect.should == '(a c)'
644
+ t.sanity_check
643
645
 
644
646
  end
645
647
  def test_replace_in_middle
@@ -650,8 +652,8 @@ class TestCommonTree < Test::Unit::TestCase
650
652
 
651
653
  new_child = new_node( new_token 99, :text => 'x' )
652
654
  t.replace_children(1, 1, new_child)
653
- t.to_string_tree.should == '(a b x d)'
654
- t.sanity_check_parent_and_child_indexes
655
+ t.inspect.should == '(a b x d)'
656
+ t.sanity_check
655
657
  end
656
658
 
657
659
  def test_replace_at_left
@@ -662,8 +664,8 @@ class TestCommonTree < Test::Unit::TestCase
662
664
 
663
665
  new_child = new_node( new_token 99, :text => 'x' )
664
666
  t.replace_children(0, 0, new_child)
665
- t.to_string_tree.should == '(a x c d)'
666
- t.sanity_check_parent_and_child_indexes
667
+ t.inspect.should == '(a x c d)'
668
+ t.sanity_check
667
669
  end
668
670
 
669
671
  def test_replace_at_left
@@ -674,8 +676,8 @@ class TestCommonTree < Test::Unit::TestCase
674
676
 
675
677
  new_child = new_node( new_token 99, :text => 'x' )
676
678
  t.replace_children(2, 2, new_child)
677
- t.to_string_tree.should == '(a b c x)'
678
- t.sanity_check_parent_and_child_indexes
679
+ t.inspect.should == '(a b c x)'
680
+ t.sanity_check
679
681
  end
680
682
 
681
683
  def test_replace_one_with_two_at_left
@@ -689,8 +691,8 @@ class TestCommonTree < Test::Unit::TestCase
689
691
  new_children.add_child new_node( new_token 99, :text => 'y' )
690
692
 
691
693
  t.replace_children(0, 0, new_children)
692
- t.to_string_tree.should == '(a x y c d)'
693
- t.sanity_check_parent_and_child_indexes
694
+ t.inspect.should == '(a x y c d)'
695
+ t.sanity_check
694
696
  end
695
697
 
696
698
  def test_replace_one_with_two_at_right
@@ -704,8 +706,8 @@ class TestCommonTree < Test::Unit::TestCase
704
706
  new_children.add_child new_node( new_token 99, :text => 'y' )
705
707
 
706
708
  t.replace_children(2, 2, new_children)
707
- t.to_string_tree.should == '(a b c x y)'
708
- t.sanity_check_parent_and_child_indexes
709
+ t.inspect.should == '(a b c x y)'
710
+ t.sanity_check
709
711
  end
710
712
 
711
713
  def test_replace_one_with_two_in_middle
@@ -719,8 +721,8 @@ class TestCommonTree < Test::Unit::TestCase
719
721
  new_children.add_child new_node( new_token 99, :text => 'y' )
720
722
 
721
723
  t.replace_children(1, 1, new_children)
722
- t.to_string_tree.should == '(a b x y d)'
723
- t.sanity_check_parent_and_child_indexes
724
+ t.inspect.should == '(a b x y d)'
725
+ t.sanity_check
724
726
  end
725
727
 
726
728
  def test_replace_two_with_one_at_left
@@ -732,8 +734,8 @@ class TestCommonTree < Test::Unit::TestCase
732
734
  new_child = new_node( new_token 99, :text => 'x' )
733
735
 
734
736
  t.replace_children(0, 1, new_child)
735
- t.to_string_tree.should == '(a x d)'
736
- t.sanity_check_parent_and_child_indexes
737
+ t.inspect.should == '(a x d)'
738
+ t.sanity_check
737
739
  end
738
740
 
739
741
  def test_replace_two_with_one_at_right
@@ -745,8 +747,8 @@ class TestCommonTree < Test::Unit::TestCase
745
747
  new_child = new_node( new_token 99, :text => 'x' )
746
748
 
747
749
  t.replace_children(1, 2, new_child)
748
- t.to_string_tree.should == '(a b x)'
749
- t.sanity_check_parent_and_child_indexes
750
+ t.inspect.should == '(a b x)'
751
+ t.sanity_check
750
752
  end
751
753
 
752
754
  def test_replace_all_with_one
@@ -758,8 +760,8 @@ class TestCommonTree < Test::Unit::TestCase
758
760
  new_child = new_node( new_token 99, :text => 'x' )
759
761
 
760
762
  t.replace_children(0, 2, new_child)
761
- t.to_string_tree.should == '(a x)'
762
- t.sanity_check_parent_and_child_indexes
763
+ t.inspect.should == '(a x)'
764
+ t.sanity_check
763
765
  end
764
766
 
765
767
  def test_replace_all_with_two
@@ -773,8 +775,8 @@ class TestCommonTree < Test::Unit::TestCase
773
775
  new_children.add_child new_node( new_token 99, :text => 'y' )
774
776
 
775
777
  t.replace_children(0, 1, new_children)
776
- t.to_string_tree.should == '(a x y d)'
777
- t.sanity_check_parent_and_child_indexes
778
+ t.inspect.should == '(a x y d)'
779
+ t.sanity_check
778
780
  end
779
781
 
780
782
  def new_token(type, opts = {})
@@ -792,9 +794,12 @@ class TestTreeContext < Test::Unit::TestCase
792
794
  <invalid> <EOR> <DOWN> <UP> VEC ASSIGN PRINT
793
795
  PLUS MULT DOT ID INT WS '[' ',' ']'
794
796
  )
797
+ Tokens = TokenScheme.build( TOKEN_NAMES )
798
+
795
799
  def setup
796
- # before-each-test code
800
+ @wizard = Wizard.new( :token_scheme => Tokens )
797
801
  end
802
+
798
803
  def teardown
799
804
  # after-each-test code
800
805
  end
@@ -802,53 +807,37 @@ class TestTreeContext < Test::Unit::TestCase
802
807
  # vvvvvvvv tests vvvvvvvvv
803
808
 
804
809
  def test_simple_parent
805
- tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))"
806
- adaptor = CommonTreeAdaptor.new
807
- wiz = Wizard.new(adaptor, TOKEN_NAMES)
808
- t = wiz.create(tree)
809
-
810
- labels = {}
811
-
812
- valid = wiz.parse(t,
813
- "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))",
814
- labels
810
+ tree = @wizard.create(
811
+ "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))"
812
+ )
813
+ labels = @wizard.match( tree,
814
+ "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))"
815
815
  )
816
- assert(valid)
817
- node = labels['x']
818
816
 
819
- TreeParser.in_context?(adaptor, TOKEN_NAMES, node, "VEC").should be_true
817
+ assert_kind_of( Hash, labels )
818
+ @wizard.in_context?( labels.fetch( 'x' ), 'VEC' ).should be_true
820
819
  end
821
820
 
822
821
  def test_no_parent
823
- tree = '(PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3])))'
824
- adaptor = CommonTreeAdaptor.new
825
- wiz = Wizard.new(adaptor, TOKEN_NAMES)
826
- t = wiz.create(tree)
827
-
828
- labels = {}
829
- valid = wiz.parse(t,
830
- "(%x:PRINT (MULT ID (VEC INT INT INT)))",
831
- labels
822
+ tree = @wizard.create(
823
+ '(PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3])))'
832
824
  )
833
- assert(valid)
834
- node = labels['x']
835
- assert_equal false,
836
- TreeParser.in_context?(adaptor, TOKEN_NAMES, node, "VEC")
825
+
826
+ labels = @wizard.match( tree, "(%x:PRINT (MULT ID (VEC INT INT INT)))" )
827
+ assert_kind_of( Hash, labels )
828
+ @wizard.in_context?( labels.fetch( 'x' ), 'VEC' ).should be_false
837
829
  end
838
830
 
839
831
  def test_parent_with_wildcard
840
- tree = "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))"
841
- adaptor = CommonTreeAdaptor.new
842
- wiz = Wizard.new(adaptor, TOKEN_NAMES)
843
- t = wiz.create(tree)
844
-
845
- labels = {}
846
- assert wiz.parse(t,
847
- "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))",
848
- labels)
849
- node = labels['x']
850
-
851
- assert_equal true,
852
- TreeParser.in_context?(adaptor, TOKEN_NAMES, node, 'VEC ...')
832
+ tree = @wizard.create(
833
+ "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID[x] (VEC INT[1] INT[2] INT[3]))))"
834
+ )
835
+
836
+ labels = @wizard.match( tree,
837
+ "(nil (ASSIGN ID[x] INT[3]) (PRINT (MULT ID (VEC INT %x:INT INT))))"
838
+ )
839
+ assert_kind_of( Hash, labels )
840
+ node = labels.fetch( 'x' )
841
+ @wizard.in_context?( node, 'VEC ...' ).should be_true
853
842
  end
854
843
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: antlr3
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Yetter
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-25 00:00:00 -05:00
12
+ date: 2010-01-02 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -72,18 +72,17 @@ files:
72
72
  - lib/antlr3/version.rb
73
73
  - lib/antlr3/error.rb
74
74
  - lib/antlr3/tree.rb
75
- - lib/antlr3/test/diff.rb
76
75
  - lib/antlr3/test/functional.rb
77
76
  - lib/antlr3/test/call-stack.rb
78
77
  - lib/antlr3/test/grammar.rb
79
78
  - lib/antlr3/test/core-extensions.rb
80
- - lib/antlr3/test/config.rb
81
79
  - lib/antlr3/dfa.rb
82
80
  - lib/antlr3/profile.rb
83
81
  - lib/antlr3/tree/visitor.rb
84
82
  - lib/antlr3/tree/debug.rb
85
83
  - lib/antlr3/tree/wizard.rb
86
84
  - lib/antlr3/token.rb
85
+ - lib/antlr3/task.rb
87
86
  - lib/antlr3/constants.rb
88
87
  - lib/antlr3/util.rb
89
88
  - lib/antlr3.rb
@@ -131,7 +130,7 @@ files:
131
130
  - templates/Dbg.stg
132
131
  - templates/ASTParser.stg
133
132
  - templates/ASTTreeParser.stg
134
- - samples/Cpp.g
133
+ - samples/CPP.g
135
134
  - samples/ANTLRv3Grammar.g
136
135
  - README.txt
137
136
  - ANTLR-LICENSE.txt
@@ -1,23 +0,0 @@
1
- #!/usr/bin/ruby
2
- # encoding: utf-8
3
-
4
- =begin ::about::
5
- author: Kyle Yetter <kcy5b@yahoo.com>
6
- created on: October 11, 2009
7
- =end
8
-
9
- module ANTLR3
10
- module Test
11
-
12
- require 'rbconfig'
13
- path_sep = RbConfig::CONFIG['PATH_SEPARATOR']
14
-
15
-
16
-
17
- exec_path = ENV['PATH'].split(path_sep)
18
-
19
-
20
-
21
-
22
- end
23
- end
@@ -1,165 +0,0 @@
1
- #!/usr/bin/ruby
2
- # encoding: utf-8
3
-
4
- module ANTLR3
5
- module Test
6
- module Diff
7
- module_function
8
-
9
- # trim common head and tail elements of the two lists
10
- def width
11
- screen_width - 20
12
- end
13
-
14
- def column_width
15
- width / 2 - 1
16
- end
17
-
18
- def segment(list_a, list_b)
19
- # trim leading common elements
20
- common_head = 0
21
- list_a.zip(list_b) do |a, b|
22
- a == b ? (common_head += 1) : break
23
- end
24
- head = list_a[0...common_head]
25
- list_a = list_a[common_head..-1].reverse!
26
- list_b = list_b[common_head..-1].reverse!
27
-
28
-
29
- common_tail = 0
30
- list_a.zip(list_b) { |a,b| a == b ? (common_tail += 1) : break }
31
- tail = list_a[0...common_tail].reverse!
32
- list_a = list_a[common_tail..-1].reverse!
33
- list_b = list_b[common_tail..-1].reverse!
34
-
35
- return [head, tail, list_a, list_b]
36
- end
37
-
38
- def max(a,b)
39
- case a <=> b
40
- when -1 then b
41
- else a
42
- end
43
- end
44
-
45
- def colorize(text, color)
46
- lines = text.split("\n")
47
- escape =
48
- case color
49
- when :white then "\e[37m"
50
- when :magenta then "\e[35m"
51
- when :yellow then "\e[33m"
52
- when :green then "\e[32m"
53
- when :black then "\e[30m"
54
- when :red then "\e[31m"
55
- when :cyan then "\e[36m"
56
- when :blue then "\e[34m"
57
- end
58
- lines.map! { |ln| escape + ln << "\e[\0m" }.join("\n")
59
- end
60
-
61
- def display_shared(item)
62
- colorize(pair(item, item), :green)
63
- end
64
- def display_addition(item)
65
- colorize(pair(nil, item), :magenta)
66
- end
67
- def display_subtraction(item)
68
- colorize(pair(item, nil), :red)
69
- end
70
- def wrapped_inspect(list)
71
- width = column_width
72
- list = list.map { |i| i.inspect }
73
- list[-1] << ' ]'
74
-
75
- lines, line, joint = [], '[ ', ''
76
-
77
- add_line = proc do |l|
78
- lines << l.ljust(width)
79
- ' '
80
- end
81
-
82
- for item in list
83
- line << joint
84
- leftover = width - line.length
85
- if item.length > leftover
86
- i = item.rindex(/\s+/, leftover - 1) || leftover
87
- if
88
- line = add_line[line << item[0, i]]
89
- item = item[i..-1]
90
- else
91
-
92
- end
93
- end
94
- line << item
95
-
96
- d = item.length + 2
97
- if line.length + d > width
98
- line << ','
99
- lines << line
100
- line, joint = ' ', ''
101
- else
102
- joint = ", "
103
- end
104
- end
105
- lines << line
106
-
107
- lines.join("\n")
108
- end
109
-
110
- def pair(x, y)
111
- x = x ? wrapped_inspect(x).split("\n") : []
112
- y = y ? wrapped_inspect(y).split("\n") : []
113
- line_count = max(x.length, y.length)
114
- x.pad!(line_count, '')
115
- y.pad!(line_count, '')
116
-
117
- x.zip(y).map! { |pair| pair.map! { |i| i.ljust(column_width) }.join(' ') }.join("\n")
118
- end
119
-
120
- def compute_lcs(list_a, list_b)
121
- m, n = list_a.length, list_b.length
122
- lcs_matrix = Array.new(m + 1) do |row|
123
- Array.new(n + 1, 0)
124
- end
125
- m.times do |i| n.times do |j|
126
- if list_a[i] == list_b[j] then lcs_matrix[i+1][j+1] = lcs_matrix[i][j] + 1
127
- else lcs_matrix[i+1][j+1] = max(lcs_matrix[i+1][j], lcs_matrix[i][j+1])
128
- end
129
- end end
130
- return lcs_matrix
131
- end
132
-
133
- def partial_diff(out, a, b, lcs, i = a.length, j = b.length)
134
- if i > 0 and j > 0 and a[i-1] == b[j-1]
135
- partial_diff(out, a, b, lcs, i-1, j-1)
136
- out << display_shared(a[i-1])
137
- else
138
- if j > 0 and i.zero? || lcs[i][j-1] >= lcs[i-1][j]
139
- partial_diff(out,a,b,lcs,i,j-1)
140
- out << display_addition(b[j-1])
141
- elsif i > 0 and j.zero? || lcs[i][j-1] < lcs[i-1][j]
142
- partial_diff(out, a,b,lcs,i-1,j)
143
- out << display_subtraction(a[i-1])
144
- end
145
- end
146
- return out
147
- end
148
-
149
- def diff(a, b, options = {})
150
- head, tail, a, b = segment(a, b)
151
- lcs = compute_lcs(a,b)
152
- out = []
153
- out << %w(Expected Got).map! { |w| w.ljust(column_width) }.join(' ')
154
- head.each do |item|
155
- out << display_shared(item)
156
- end
157
- partial_diff(out, a, b, lcs)
158
- tail.each do |item|
159
- out << display_shared(item)
160
- end
161
- out.join("\n")
162
- end
163
- end
164
- end
165
- end