racc 1.4.16 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/README.ja.rdoc +0 -1
  3. data/README.rdoc +8 -11
  4. data/bin/racc +37 -23
  5. data/{rdoc → doc}/en/NEWS.en.rdoc +0 -0
  6. data/{rdoc → doc}/en/grammar.en.rdoc +27 -31
  7. data/doc/en/grammar2.en.rdoc +219 -0
  8. data/{rdoc → doc}/ja/NEWS.ja.rdoc +0 -0
  9. data/{rdoc → doc}/ja/command.ja.html +1 -1
  10. data/{rdoc → doc}/ja/debug.ja.rdoc +0 -0
  11. data/{rdoc → doc}/ja/grammar.ja.rdoc +0 -0
  12. data/{rdoc → doc}/ja/index.ja.html +0 -0
  13. data/{rdoc → doc}/ja/parser.ja.rdoc +0 -0
  14. data/{rdoc → doc}/ja/usage.ja.html +0 -0
  15. data/ext/racc/cparse/cparse.c +19 -17
  16. data/ext/racc/cparse/extconf.rb +2 -1
  17. data/lib/racc/compat.rb +5 -4
  18. data/lib/racc/debugflags.rb +5 -4
  19. data/lib/racc/exception.rb +4 -1
  20. data/lib/racc/grammar.rb +22 -17
  21. data/lib/racc/grammarfileparser.rb +7 -6
  22. data/lib/racc/info.rb +5 -2
  23. data/lib/racc/iset.rb +5 -4
  24. data/lib/racc/logfilegenerator.rb +5 -4
  25. data/lib/racc/parser-text.rb +10 -16
  26. data/lib/racc/parser.rb +10 -16
  27. data/lib/racc/parserfilegenerator.rb +5 -47
  28. data/lib/racc/sourcetext.rb +5 -4
  29. data/lib/racc/state.rb +4 -1
  30. data/lib/racc/statetransitiontable.rb +9 -14
  31. metadata +22 -140
  32. data/DEPENDS +0 -4
  33. data/Manifest.txt +0 -146
  34. data/Rakefile +0 -58
  35. data/bin/racc2y +0 -195
  36. data/bin/y2racc +0 -339
  37. data/ext/racc/com/headius/racc/Cparse.java +0 -849
  38. data/fastcache/extconf.rb +0 -2
  39. data/fastcache/fastcache.c +0 -185
  40. data/lib/racc/pre-setup +0 -13
  41. data/misc/dist.sh +0 -31
  42. data/sample/array.y +0 -67
  43. data/sample/array2.y +0 -59
  44. data/sample/calc-ja.y +0 -66
  45. data/sample/calc.y +0 -65
  46. data/sample/conflict.y +0 -15
  47. data/sample/hash.y +0 -60
  48. data/sample/lalr.y +0 -17
  49. data/sample/lists.y +0 -57
  50. data/sample/syntax.y +0 -46
  51. data/sample/yyerr.y +0 -46
  52. data/setup.rb +0 -1587
  53. data/tasks/doc.rb +0 -12
  54. data/tasks/email.rb +0 -55
  55. data/test/assets/cadenza.y +0 -170
  56. data/test/assets/cast.y +0 -926
  57. data/test/assets/chk.y +0 -126
  58. data/test/assets/conf.y +0 -16
  59. data/test/assets/csspool.y +0 -729
  60. data/test/assets/digraph.y +0 -29
  61. data/test/assets/echk.y +0 -118
  62. data/test/assets/edtf.y +0 -583
  63. data/test/assets/err.y +0 -60
  64. data/test/assets/error_recovery.y +0 -35
  65. data/test/assets/expect.y +0 -7
  66. data/test/assets/firstline.y +0 -4
  67. data/test/assets/huia.y +0 -318
  68. data/test/assets/ichk.y +0 -102
  69. data/test/assets/intp.y +0 -546
  70. data/test/assets/journey.y +0 -47
  71. data/test/assets/liquor.y +0 -313
  72. data/test/assets/machete.y +0 -423
  73. data/test/assets/macruby.y +0 -2197
  74. data/test/assets/mailp.y +0 -437
  75. data/test/assets/mediacloth.y +0 -599
  76. data/test/assets/mof.y +0 -649
  77. data/test/assets/namae.y +0 -302
  78. data/test/assets/nasl.y +0 -626
  79. data/test/assets/newsyn.y +0 -25
  80. data/test/assets/noend.y +0 -4
  81. data/test/assets/nokogiri-css.y +0 -255
  82. data/test/assets/nonass.y +0 -41
  83. data/test/assets/normal.y +0 -27
  84. data/test/assets/norule.y +0 -4
  85. data/test/assets/nullbug1.y +0 -25
  86. data/test/assets/nullbug2.y +0 -15
  87. data/test/assets/opal.y +0 -1807
  88. data/test/assets/opt.y +0 -123
  89. data/test/assets/percent.y +0 -35
  90. data/test/assets/php_serialization.y +0 -98
  91. data/test/assets/recv.y +0 -97
  92. data/test/assets/riml.y +0 -665
  93. data/test/assets/rrconf.y +0 -14
  94. data/test/assets/ruby18.y +0 -1943
  95. data/test/assets/ruby19.y +0 -2174
  96. data/test/assets/ruby20.y +0 -2350
  97. data/test/assets/ruby21.y +0 -2359
  98. data/test/assets/ruby22.y +0 -2381
  99. data/test/assets/scan.y +0 -72
  100. data/test/assets/syntax.y +0 -50
  101. data/test/assets/tp_plus.y +0 -622
  102. data/test/assets/twowaysql.y +0 -278
  103. data/test/assets/unterm.y +0 -5
  104. data/test/assets/useless.y +0 -12
  105. data/test/assets/yyerr.y +0 -46
  106. data/test/bench.y +0 -36
  107. data/test/helper.rb +0 -115
  108. data/test/infini.y +0 -8
  109. data/test/regress/cadenza +0 -796
  110. data/test/regress/cast +0 -3425
  111. data/test/regress/csspool +0 -2318
  112. data/test/regress/edtf +0 -1794
  113. data/test/regress/huia +0 -1392
  114. data/test/regress/journey +0 -222
  115. data/test/regress/liquor +0 -885
  116. data/test/regress/machete +0 -833
  117. data/test/regress/mediacloth +0 -1463
  118. data/test/regress/mof +0 -1368
  119. data/test/regress/namae +0 -634
  120. data/test/regress/nasl +0 -2058
  121. data/test/regress/nokogiri-css +0 -836
  122. data/test/regress/opal +0 -6429
  123. data/test/regress/php_serialization +0 -336
  124. data/test/regress/riml +0 -3297
  125. data/test/regress/ruby18 +0 -6351
  126. data/test/regress/ruby22 +0 -7456
  127. data/test/regress/tp_plus +0 -1933
  128. data/test/regress/twowaysql +0 -556
  129. data/test/scandata/brace +0 -7
  130. data/test/scandata/gvar +0 -1
  131. data/test/scandata/normal +0 -4
  132. data/test/scandata/percent +0 -18
  133. data/test/scandata/slash +0 -10
  134. data/test/src.intp +0 -34
  135. data/test/start.y +0 -20
  136. data/test/test_chk_y.rb +0 -52
  137. data/test/test_grammar_file_parser.rb +0 -15
  138. data/test/test_racc_command.rb +0 -322
  139. data/test/test_scan_y.rb +0 -52
  140. data/test/testscanner.rb +0 -51
  141. data/web/racc.en.rhtml +0 -42
  142. data/web/racc.ja.rhtml +0 -51
data/fastcache/extconf.rb DELETED
@@ -1,2 +0,0 @@
1
- require 'mkmf'
2
- create_makefile 'corecache'
@@ -1,185 +0,0 @@
1
- /*
2
- $Id$
3
-
4
- Copyright (C) 2005 Minero Aoki
5
-
6
- This program is free software.
7
- You can distribute/modify this program under the terms of
8
- the GNU LGPL, Lesser General Public Licese version 2.1.
9
- */
10
-
11
- #include "ruby.h"
12
-
13
- static VALUE LALRcoreCache;
14
-
15
- struct item_holder {
16
- unsigned long hashval;
17
- VALUE core;
18
- VALUE state;
19
- struct item_holder *next;
20
- };
21
-
22
- struct lalr_state_cache {
23
- struct item_holder **bin;
24
- long size;
25
- long num;
26
- };
27
-
28
- static void
29
- lalrc_free(struct lalr_state_cache *p)
30
- {
31
- struct item_holder *tmp;
32
- long i;
33
-
34
- for (i = 0; i < p->size; i++) {
35
- while (tmp = p->bin[i]) {
36
- p->bin[i] = tmp->next;
37
- free(tmp);
38
- }
39
- }
40
- free(p->bin);
41
- free(p);
42
- }
43
-
44
- #define INIT_BIN 256
45
-
46
- static VALUE
47
- lalrc_s_new(VALUE self)
48
- {
49
- struct lalr_state_cache *cache;
50
-
51
- cache = ALLOC_N(struct lalr_state_cache, 1);
52
- cache->bin = ALLOC_N(struct item_holder*, INIT_BIN);
53
- cache->size = INIT_BIN;
54
- cache->num = 0;
55
- return Data_Wrap_Struct(LALRcoreCache, 0, lalrc_free, cache);
56
- }
57
-
58
- #define GET_LALRC(self, p) Data_Get_Struct(self, struct lalr_state_cache, p)
59
-
60
- static void
61
- lalrc_rehash(struct lalr_state_cache *p)
62
- {
63
- struct item_holder *top = 0, *tmp = 0;
64
- long i;
65
-
66
- for (i = p->size / 2; i < p->size; i++) {
67
- p->bin[i] = 0;
68
- }
69
- for (i = 0; i < p->size / 2; i++) {
70
- if (!p->bin[i])
71
- continue;
72
-
73
- tmp = p->bin[i];
74
- while (tmp->next)
75
- tmp = tmp->next;
76
- tmp->next = top;
77
- top = p->bin[i];
78
- p->bin[i] = 0;
79
- }
80
-
81
- while (top) {
82
- tmp = top;
83
- top = tmp->next;
84
- tmp->next = 0;
85
-
86
- i = tmp->hashval % p->size;
87
- if (p->bin[i]) {
88
- tmp->next = p->bin[i];
89
- p->bin[i] = tmp;
90
- }
91
- else {
92
- p->bin[i] = tmp;
93
- }
94
- }
95
- }
96
-
97
- static int
98
- coreeql(VALUE a, VALUE b)
99
- {
100
- long i;
101
-
102
- /* Check_Type(a, T_ARRAY);
103
- Check_Type(b, T_ARRAY); */
104
- if (RARRAY(a)->len != RARRAY(b)->len)
105
- return 0;
106
- for (i = 0; i < RARRAY(a)->len; i++)
107
- if (RARRAY(a)->ptr[i] != RARRAY(b)->ptr[i])
108
- return 0;
109
-
110
- return 1;
111
- }
112
-
113
- static unsigned long
114
- hashval(VALUE core)
115
- {
116
- unsigned long v = 0;
117
- long i, j;
118
-
119
- for (i = 0; i < RARRAY(core)->len; i++) {
120
- v *= RARRAY(core)->ptr[i];
121
- v ^= RARRAY(core)->ptr[i];
122
- }
123
- return v;
124
- }
125
-
126
- static VALUE
127
- lalrc_aref(VALUE self, VALUE core)
128
- {
129
- struct lalr_state_cache *p;
130
- unsigned long v;
131
- long i;
132
- struct item_holder *ad;
133
-
134
- /* Check_Type(core, T_ARRAY); */
135
- GET_LALRC(self, p);
136
- v = hashval(core);
137
- i = v % p->size;
138
- ad = p->bin[i];
139
- while (ad) {
140
- if (ad->hashval == v) {
141
- if (coreeql(core, ad->core)) {
142
- return ad->state;
143
- }
144
- else {
145
- printf(".");
146
- }
147
- }
148
- ad = ad->next;
149
- }
150
- return Qnil;
151
- }
152
-
153
- static VALUE
154
- lalrc_add_direct(VALUE self, VALUE core, VALUE state)
155
- {
156
- struct lalr_state_cache *p;
157
- struct item_holder *ad;
158
- long i;
159
-
160
- GET_LALRC(self, p);
161
- ad = ALLOC_N(struct item_holder, 1);
162
- ad->hashval = hashval(core);
163
- ad->core = core;
164
- ad->state = state;
165
-
166
- i = ad->hashval % p->size;
167
- ad->next = p->bin[i];
168
- p->bin[i] = ad;
169
- p->num++;
170
- if ((p->num / p->size) >= 1) {
171
- REALLOC_N(p->bin, struct item_holder*, p->size * 2);
172
- p->size *= 2;
173
- lalrc_rehash(p);
174
- }
175
- return Qnil;
176
- }
177
-
178
- void
179
- Init_corecache(void)
180
- {
181
- LALRcoreCache = rb_define_class("LALRcoreCache", rb_cObject);
182
- rb_define_singleton_method(LALRcoreCache, "new", lalrc_s_new, 0);
183
- rb_define_method(LALRcoreCache, "[]", lalrc_aref, 1);
184
- rb_define_method(LALRcoreCache, "[]=", lalrc_add_direct, 2);
185
- }
data/lib/racc/pre-setup DELETED
@@ -1,13 +0,0 @@
1
- def generate_parser_text_rb(target)
2
- return if File.exist?(srcfile(target))
3
- $stderr.puts "generating #{target}..."
4
- File.open(target, 'w') {|f|
5
- f.puts "module Racc"
6
- f.puts " PARSER_TEXT = <<'__end_of_file__'"
7
- f.puts File.read(srcfile('parser.rb'))
8
- f.puts "__end_of_file__"
9
- f.puts "end"
10
- }
11
- end
12
-
13
- generate_parser_text_rb 'parser-text.rb'
data/misc/dist.sh DELETED
@@ -1,31 +0,0 @@
1
- #!/bin/sh
2
-
3
- rm -rf tmp
4
- mkdir tmp
5
- cd tmp
6
-
7
- # racc, raccrt
8
- cvs -Q export -r`echo V$version | tr . -` -d racc-$version racc
9
- cd racc-$version
10
- make bootstrap lib/racc/parser-text.rb doc
11
- rm -r doc web bits fastcache
12
- cd ..
13
- mkdir -p raccrt-$version/lib/racc
14
- mv racc-$version/lib/racc/parser.rb raccrt-$version/lib/racc
15
- mv racc-$version/ext raccrt-$version
16
- cp racc-$version/setup.rb raccrt-$version
17
- cp racc-$version/README.* raccrt-$version
18
- cp racc-$version/COPYING raccrt-$version
19
- tar czf $ardir/racc/racc-$version.tar.gz racc-$version
20
- tar czf $ardir/raccrt/raccrt-$version.tar.gz raccrt-$version
21
-
22
- # -all
23
- mkdir -p racc-$version-all/packages
24
- cp racc-$version/setup.rb racc-$version-all
25
- cp racc-$version/README.* racc-$version-all
26
- mv racc-$version racc-$version-all/packages/racc
27
- mv raccrt-$version racc-$version-all/packages/raccrt
28
- tar czf $ardir/racc/racc-$version-all.tar.gz racc-$version-all
29
-
30
- cd ..
31
- rm -rf tmp
data/sample/array.y DELETED
@@ -1,67 +0,0 @@
1
- # $Id$
2
- #
3
- # convert Array-like string into Ruby's Array.
4
-
5
- class ArrayParser
6
-
7
- rule
8
-
9
- array : '[' contents ']'
10
- {
11
- result = val[1]
12
- }
13
- | '[' ']'
14
- {
15
- result = []
16
- }
17
-
18
- contents: ITEM
19
- {
20
- result = val
21
- }
22
- | contents ',' ITEM
23
- {
24
- result.push val[2]
25
- }
26
-
27
- ---- inner
28
-
29
- def parse(str)
30
- str = str.strip
31
- @q = []
32
- until str.empty?
33
- case str
34
- when /\A\s+/
35
- str = $'
36
- when /\A\w+/
37
- @q.push [:ITEM, $&]
38
- str = $'
39
- else
40
- c = str[0,1]
41
- @q.push [c, c]
42
- str = str[1..-1]
43
- end
44
- end
45
- @q.push [false, '$'] # is optional from Racc 1.3.7
46
- do_parse
47
- end
48
-
49
- def next_token
50
- @q.shift
51
- end
52
-
53
- ---- footer
54
-
55
- if $0 == __FILE__
56
- src = <<EOS
57
- [
58
- a, b, c,
59
- d,
60
- e ]
61
- EOS
62
- puts 'parsing:'
63
- print src
64
- puts
65
- puts 'result:'
66
- p ArrayParser.new.parse(src)
67
- end
data/sample/array2.y DELETED
@@ -1,59 +0,0 @@
1
- # $Id$
2
- #
3
- # Converting Array-like string into Ruby's Array, version 2.
4
- # This grammer uses no_result_var.
5
-
6
- class ArrayParser2
7
- options no_result_var
8
- rule
9
- array : '[' contents ']' { val[1] }
10
- | '[' ']' { [] }
11
-
12
- contents: ITEM { val }
13
- | contents ',' ITEM { val[0].push val[2]; val[0] }
14
- end
15
-
16
- ---- inner
17
-
18
- def parse(str)
19
- @str = str
20
- yyparse self, :scan
21
- end
22
-
23
- def scan
24
- str = @str.strip
25
- until str.empty?
26
- case str
27
- when /\A\s+/
28
- str = $'
29
- when /\A\w+/
30
- yield :ITEM, $&
31
- str = $'
32
- else
33
- c = str[0,1]
34
- yield c, c
35
- str = str[1..-1]
36
- end
37
- end
38
- yield false, '$' # is optional from Racc 1.3.7
39
- end
40
-
41
- def next_token
42
- @q.shift
43
- end
44
-
45
- ---- footer
46
-
47
- if $0 == __FILE__
48
- src = <<EOS
49
- [
50
- a, b, c,
51
- d,
52
- e ]
53
- EOS
54
- puts 'parsing:'
55
- print src
56
- puts
57
- puts 'result:'
58
- p ArrayParser2.new.parse(src)
59
- end
data/sample/calc-ja.y DELETED
@@ -1,66 +0,0 @@
1
- # $Id$
2
- #
3
- # A simple calculator, version 2.
4
- # This file contains Japanese characters (encoding=EUC-JP).
5
-
6
- class Calculator2
7
- prechigh
8
- nonassoc UMINUS
9
- left '*' '/'
10
- left '+' '-'
11
- preclow
12
- options no_result_var
13
- rule
14
- target : exp
15
- | /* none */ { 0 }
16
-
17
- exp : exp '+' exp { val[0] + val[2] }
18
- | exp '-' exp { val[0] - val[2] }
19
- | exp '*' exp { val[0] * val[2] }
20
- | exp '/' exp { val[0] / val[2] }
21
- | '(' exp ')' { val[1] }
22
- | '-' NUMBER =UMINUS { -(val[1]) }
23
- | NUMBER
24
- end
25
-
26
- ---- header
27
- # $Id$
28
- ---- inner
29
-
30
- def evaluate(str)
31
- @tokens = []
32
- until str.empty?
33
- case str
34
- when /\A\s+/
35
- ;
36
- when /\A\d+/
37
- @tokens.push [:NUMBER, $&.to_i]
38
- when /\A.|\n/
39
- s = $&
40
- @tokens.push [s, s]
41
- end
42
- str = $'
43
- end
44
- @tokens.push [false, '$']
45
- do_parse
46
- end
47
-
48
- def next_token
49
- @tokens.shift
50
- end
51
-
52
- ---- footer
53
-
54
- puts 'Ķ������� 2 �浡'
55
- puts 'Q �ǽ�λ���ޤ�'
56
- calc = Calculator2.new
57
- while true
58
- print '>>> '; $stdout.flush
59
- str = $stdin.gets.strip
60
- break if /q/i =~ str
61
- begin
62
- p calc.evaluate(str)
63
- rescue ParseError
64
- puts 'parse error'
65
- end
66
- end
data/sample/calc.y DELETED
@@ -1,65 +0,0 @@
1
- # $Id$
2
- #
3
- # Very simple calculater.
4
-
5
- class Calcp
6
- prechigh
7
- nonassoc UMINUS
8
- left '*' '/'
9
- left '+' '-'
10
- preclow
11
- rule
12
- target: exp
13
- | /* none */ { result = 0 }
14
-
15
- exp: exp '+' exp { result += val[2] }
16
- | exp '-' exp { result -= val[2] }
17
- | exp '*' exp { result *= val[2] }
18
- | exp '/' exp { result /= val[2] }
19
- | '(' exp ')' { result = val[1] }
20
- | '-' NUMBER =UMINUS { result = -val[1] }
21
- | NUMBER
22
- end
23
-
24
- ---- header
25
- # $Id$
26
- ---- inner
27
-
28
- def parse(str)
29
- @q = []
30
- until str.empty?
31
- case str
32
- when /\A\s+/
33
- when /\A\d+/
34
- @q.push [:NUMBER, $&.to_i]
35
- when /\A.|\n/o
36
- s = $&
37
- @q.push [s, s]
38
- end
39
- str = $'
40
- end
41
- @q.push [false, '$end']
42
- do_parse
43
- end
44
-
45
- def next_token
46
- @q.shift
47
- end
48
-
49
- ---- footer
50
-
51
- parser = Calcp.new
52
- puts
53
- puts 'type "Q" to quit.'
54
- puts
55
- while true
56
- puts
57
- print '? '
58
- str = gets.chop!
59
- break if /q/i =~ str
60
- begin
61
- puts "= #{parser.parse(str)}"
62
- rescue ParseError
63
- puts $!
64
- end
65
- end
data/sample/conflict.y DELETED
@@ -1,15 +0,0 @@
1
- # $Id$
2
- #
3
- # Example of conflicted grammer.
4
- # This grammer contains 1 Shift/Reduce conflict and 1 Reduce/Reduce conflict.
5
-
6
- class A
7
- rule
8
- target : outer
9
-
10
- outer :
11
- | outer inner
12
-
13
- inner :
14
- | inner ITEM
15
- end
data/sample/hash.y DELETED
@@ -1,60 +0,0 @@
1
- # $Id$
2
- #
3
- # Converting Hash-like string into Ruby's Hash.
4
-
5
- class HashParser
6
- options no_result_var
7
- rule
8
- hash : '{' contents '}' { val[1] }
9
- | '{' '}' { Hash.new }
10
-
11
- # Racc can handle string over 2 bytes.
12
- contents: IDENT '=>' IDENT { {val[0] => val[2]} }
13
- | contents ',' IDENT '=>' IDENT { val[0][val[2]] = val[4]; val[0] }
14
- end
15
-
16
- ---- inner
17
-
18
- def parse(str)
19
- @str = str
20
- yyparse self, :scan
21
- end
22
-
23
- private
24
-
25
- def scan
26
- str = @str
27
- until str.empty?
28
- case str
29
- when /\A\s+/
30
- str = $'
31
- when /\A\w+/
32
- yield :IDENT, $&
33
- str = $'
34
- when /\A=>/
35
- yield '=>', '=>'
36
- str = $'
37
- else
38
- c = str[0,1]
39
- yield c, c
40
- str = str[1..-1]
41
- end
42
- end
43
- yield false, '$' # is optional from Racc 1.3.7
44
- end
45
-
46
- ---- footer
47
-
48
- if $0 == __FILE__
49
- src = <<EOS
50
- {
51
- name => MyName,
52
- id => MyIdent
53
- }
54
- EOS
55
- puts 'Parsing (String):'
56
- print src
57
- puts
58
- puts 'Result (Ruby Object):'
59
- p HashParser.new.parse(src)
60
- end
data/sample/lalr.y DELETED
@@ -1,17 +0,0 @@
1
- # $Id$
2
- #
3
- # This is LALR grammer, and not LL/SLR.
4
-
5
- class A
6
- rule
7
- A : L '=' E
8
-
9
- L : i
10
- | R '^' i
11
-
12
- E : E '+' R
13
- | R
14
- | '@' L
15
-
16
- R : i
17
- end
data/sample/lists.y DELETED
@@ -1,57 +0,0 @@
1
- # $Id$
2
- #
3
- # Rules for verious lists.
4
- # This file is just an example, you cannot compile this file.
5
-
6
- class ExampleOnly
7
- rule
8
-
9
- # a list, which minimum number of items is 0
10
- list0 :
11
- {
12
- result = []
13
- }
14
- | list0 item
15
- {
16
- result.push val[1]
17
- }
18
-
19
- # a list, which minimum number of items is 1
20
- list1 : item
21
- {
22
- result = val
23
- }
24
- | list1 item
25
- {
26
- result.push val[1]
27
- }
28
-
29
- # a list, separated by comma
30
- clist : item
31
- {
32
- result = val
33
- }
34
- | clist ',' item
35
- {
36
- result.push val[2]
37
- }
38
-
39
- # a hash. see also "hash.y".
40
- hash : '{' hash_contents '}'
41
- {
42
- result = val[1]
43
- }
44
- | '{' '}'
45
- {
46
- result = {}
47
- }
48
-
49
- hash_contents
50
- : item "=>" item
51
- {
52
- result = { val[0] => val[2] }
53
- }
54
- | hash_contents ',' item "=>" item
55
- {
56
- result[val[2]] = val[4]
57
- }
data/sample/syntax.y DELETED
@@ -1,46 +0,0 @@
1
- # $Id$
2
- #
3
- # Racc syntax checker. This grammer file generates
4
- # invalid ruby program, you cannot run this parser.
5
-
6
- class P
7
- token A B C
8
-
9
- convert
10
- A '5'
11
- end
12
-
13
- prechigh
14
- left B
15
- preclow
16
-
17
- options omit_action_call
18
-
19
- start target
20
- rule
21
- target: A B C
22
- {
23
- print 'abc'
24
- }
25
- | B C A
26
- | C B A
27
- {
28
- print 'cba'
29
- }
30
- | cont
31
-
32
- cont : A c2 B c2 C
33
-
34
- c2 : C C C C C
35
- end
36
-
37
- ---- inner
38
-
39
- junk code !!!!
40
-
41
- kjaljlajrlaolanbla /// %%% (*((( token rule
42
- akiurtlajluealjflaj @@@@ end end end end __END__
43
- laieu2o879urkq96ga(Q#*&%Q#
44
- #&lkji END
45
-
46
- q395q?/// liutjqlkr7