racc 1.5.2 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/README.ja.rdoc +0 -1
  3. data/README.rdoc +6 -7
  4. data/{rdoc → doc}/en/NEWS.en.rdoc +0 -0
  5. data/{rdoc → doc}/en/grammar.en.rdoc +27 -31
  6. data/doc/en/grammar2.en.rdoc +219 -0
  7. data/{rdoc → doc}/ja/NEWS.ja.rdoc +0 -0
  8. data/{rdoc → doc}/ja/command.ja.html +0 -0
  9. data/{rdoc → doc}/ja/debug.ja.rdoc +0 -0
  10. data/{rdoc → doc}/ja/grammar.ja.rdoc +0 -0
  11. data/{rdoc → doc}/ja/index.ja.html +0 -0
  12. data/{rdoc → doc}/ja/parser.ja.rdoc +0 -0
  13. data/{rdoc → doc}/ja/usage.ja.html +0 -0
  14. data/ext/racc/cparse/cparse.c +1 -1
  15. data/ext/racc/cparse/extconf.rb +1 -0
  16. data/lib/racc/info.rb +1 -1
  17. data/lib/racc/parser-text.rb +1 -1
  18. data/lib/racc/parser.rb +1 -1
  19. data/lib/racc/parserfilegenerator.rb +0 -44
  20. data/lib/racc/statetransitiontable.rb +2 -8
  21. metadata +15 -121
  22. data/Rakefile +0 -79
  23. data/ext/racc/com/headius/racc/Cparse.java +0 -849
  24. data/lib/racc/pre-setup +0 -13
  25. data/sample/array.y +0 -67
  26. data/sample/array2.y +0 -59
  27. data/sample/calc-ja.y +0 -66
  28. data/sample/calc.y +0 -65
  29. data/sample/conflict.y +0 -15
  30. data/sample/hash.y +0 -60
  31. data/sample/lalr.y +0 -17
  32. data/sample/lists.y +0 -57
  33. data/sample/syntax.y +0 -46
  34. data/sample/yyerr.y +0 -46
  35. data/test/assets/cadenza.y +0 -170
  36. data/test/assets/cast.y +0 -926
  37. data/test/assets/chk.y +0 -126
  38. data/test/assets/conf.y +0 -16
  39. data/test/assets/csspool.y +0 -729
  40. data/test/assets/digraph.y +0 -29
  41. data/test/assets/echk.y +0 -118
  42. data/test/assets/edtf.y +0 -583
  43. data/test/assets/err.y +0 -60
  44. data/test/assets/error_recovery.y +0 -35
  45. data/test/assets/expect.y +0 -7
  46. data/test/assets/firstline.y +0 -4
  47. data/test/assets/huia.y +0 -318
  48. data/test/assets/ichk.y +0 -102
  49. data/test/assets/intp.y +0 -546
  50. data/test/assets/journey.y +0 -47
  51. data/test/assets/liquor.y +0 -313
  52. data/test/assets/machete.y +0 -423
  53. data/test/assets/macruby.y +0 -2197
  54. data/test/assets/mailp.y +0 -437
  55. data/test/assets/mediacloth.y +0 -599
  56. data/test/assets/mof.y +0 -649
  57. data/test/assets/namae.y +0 -302
  58. data/test/assets/nasl.y +0 -626
  59. data/test/assets/newsyn.y +0 -25
  60. data/test/assets/noend.y +0 -4
  61. data/test/assets/nokogiri-css.y +0 -255
  62. data/test/assets/nonass.y +0 -41
  63. data/test/assets/normal.y +0 -27
  64. data/test/assets/norule.y +0 -4
  65. data/test/assets/nullbug1.y +0 -25
  66. data/test/assets/nullbug2.y +0 -15
  67. data/test/assets/opal.y +0 -1807
  68. data/test/assets/opt.y +0 -123
  69. data/test/assets/percent.y +0 -35
  70. data/test/assets/php_serialization.y +0 -98
  71. data/test/assets/recv.y +0 -97
  72. data/test/assets/riml.y +0 -665
  73. data/test/assets/rrconf.y +0 -14
  74. data/test/assets/ruby18.y +0 -1943
  75. data/test/assets/ruby19.y +0 -2174
  76. data/test/assets/ruby20.y +0 -2350
  77. data/test/assets/ruby21.y +0 -2359
  78. data/test/assets/ruby22.y +0 -2381
  79. data/test/assets/scan.y +0 -72
  80. data/test/assets/syntax.y +0 -50
  81. data/test/assets/tp_plus.y +0 -622
  82. data/test/assets/twowaysql.y +0 -278
  83. data/test/assets/unterm.y +0 -5
  84. data/test/assets/useless.y +0 -12
  85. data/test/assets/yyerr.y +0 -46
  86. data/test/bench.y +0 -36
  87. data/test/helper.rb +0 -115
  88. data/test/infini.y +0 -8
  89. data/test/regress/cadenza +0 -796
  90. data/test/regress/cast +0 -3428
  91. data/test/regress/csspool +0 -2314
  92. data/test/regress/edtf +0 -1794
  93. data/test/regress/huia +0 -1392
  94. data/test/regress/journey +0 -222
  95. data/test/regress/liquor +0 -885
  96. data/test/regress/machete +0 -833
  97. data/test/regress/mediacloth +0 -1463
  98. data/test/regress/mof +0 -1368
  99. data/test/regress/namae +0 -634
  100. data/test/regress/nasl +0 -2058
  101. data/test/regress/nokogiri-css +0 -836
  102. data/test/regress/opal +0 -6431
  103. data/test/regress/php_serialization +0 -336
  104. data/test/regress/riml +0 -3283
  105. data/test/regress/ruby18 +0 -6344
  106. data/test/regress/ruby22 +0 -7460
  107. data/test/regress/tp_plus +0 -1933
  108. data/test/regress/twowaysql +0 -556
  109. data/test/scandata/brace +0 -7
  110. data/test/scandata/gvar +0 -1
  111. data/test/scandata/normal +0 -4
  112. data/test/scandata/percent +0 -18
  113. data/test/scandata/slash +0 -10
  114. data/test/src.intp +0 -34
  115. data/test/start.y +0 -20
  116. data/test/test_chk_y.rb +0 -52
  117. data/test/test_grammar_file_parser.rb +0 -15
  118. data/test/test_racc_command.rb +0 -339
  119. data/test/test_scan_y.rb +0 -52
  120. data/test/testscanner.rb +0 -51
  121. data/web/racc.en.rhtml +0 -42
  122. data/web/racc.ja.rhtml +0 -51
data/test/assets/namae.y DELETED
@@ -1,302 +0,0 @@
1
- # -*- ruby -*-
2
- # vi: set ft=ruby :
3
-
4
- # Copyright (C) 2012 President and Fellows of Harvard College
5
- # Copyright (C) 2013-2014 Sylvester Keil
6
- #
7
- # Redistribution and use in source and binary forms, with or without
8
- # modification, are permitted provided that the following conditions are met:
9
- #
10
- # 1. Redistributions of source code must retain the above copyright notice,
11
- # this list of conditions and the following disclaimer.
12
- #
13
- # 2. Redistributions in binary form must reproduce the above copyright notice,
14
- # this list of conditions and the following disclaimer in the documentation
15
- # and/or other materials provided with the distribution.
16
- #
17
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR
18
- # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19
- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
20
- # EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
21
- # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22
- # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24
- # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
- # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26
- # EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
- #
28
- # The views and conclusions contained in the software and documentation are
29
- # those of the authors and should not be interpreted as representing official
30
- # policies, either expressed or implied, of the copyright holder.
31
-
32
- class Namae::Parser
33
-
34
- token COMMA UWORD LWORD PWORD NICK AND APPELLATION TITLE SUFFIX
35
-
36
- expect 0
37
-
38
- rule
39
-
40
- names : { result = [] }
41
- | name { result = [val[0]] }
42
- | names AND name { result = val[0] << val[2] }
43
-
44
- name : word { result = Name.new(:given => val[0]) }
45
- | display_order
46
- | honorific word { result = val[0].merge(:family => val[1]) }
47
- | honorific display_order { result = val[1].merge(val[0]) }
48
- | sort_order
49
-
50
- honorific : APPELLATION { result = Name.new(:appellation => val[0]) }
51
- | TITLE { result = Name.new(:title => val[0]) }
52
-
53
- display_order : u_words word opt_suffices opt_titles
54
- {
55
- result = Name.new(:given => val[0], :family => val[1],
56
- :suffix => val[2], :title => val[3])
57
- }
58
- | u_words NICK last opt_suffices opt_titles
59
- {
60
- result = Name.new(:given => val[0], :nick => val[1],
61
- :family => val[2], :suffix => val[3], :title => val[4])
62
- }
63
- | u_words NICK von last opt_suffices opt_titles
64
- {
65
- result = Name.new(:given => val[0], :nick => val[1],
66
- :particle => val[2], :family => val[3],
67
- :suffix => val[4], :title => val[5])
68
- }
69
- | u_words von last
70
- {
71
- result = Name.new(:given => val[0], :particle => val[1],
72
- :family => val[2])
73
- }
74
- | von last
75
- {
76
- result = Name.new(:particle => val[0], :family => val[1])
77
- }
78
-
79
- sort_order : last COMMA first
80
- {
81
- result = Name.new({ :family => val[0], :suffix => val[2][0],
82
- :given => val[2][1] }, !!val[2][0])
83
- }
84
- | von last COMMA first
85
- {
86
- result = Name.new({ :particle => val[0], :family => val[1],
87
- :suffix => val[3][0], :given => val[3][1] }, !!val[3][0])
88
- }
89
- | u_words von last COMMA first
90
- {
91
- result = Name.new({ :particle => val[0,2].join(' '), :family => val[2],
92
- :suffix => val[4][0], :given => val[4][1] }, !!val[4][0])
93
- }
94
- ;
95
-
96
- von : LWORD
97
- | von LWORD { result = val.join(' ') }
98
- | von u_words LWORD { result = val.join(' ') }
99
-
100
- last : LWORD | u_words
101
-
102
- first : opt_words { result = [nil,val[0]] }
103
- | words opt_comma suffices { result = [val[2],val[0]] }
104
- | suffices { result = [val[0],nil] }
105
- | suffices COMMA words { result = [val[0],val[2]] }
106
-
107
- u_words : u_word
108
- | u_words u_word { result = val.join(' ') }
109
-
110
- u_word : UWORD | PWORD
111
-
112
- words : word
113
- | words word { result = val.join(' ') }
114
-
115
- opt_comma : /* empty */ | COMMA
116
- opt_words : /* empty */ | words
117
-
118
- word : LWORD | UWORD | PWORD
119
-
120
- opt_suffices : /* empty */ | suffices
121
-
122
- suffices : SUFFIX
123
- | suffices SUFFIX { result = val.join(' ') }
124
-
125
- opt_titles : /* empty */ | titles
126
-
127
- titles : TITLE
128
- | titles TITLE { result = val.join(' ') }
129
-
130
- ---- header
131
- require 'singleton'
132
- require 'strscan'
133
-
134
- ---- inner
135
-
136
- include Singleton
137
-
138
- attr_reader :options, :input
139
-
140
- def initialize
141
- @input, @options = StringScanner.new(''), {
142
- :debug => false,
143
- :prefer_comma_as_separator => false,
144
- :comma => ',',
145
- :stops => ',;',
146
- :separator => /\s*(\band\b|\&|;)\s*/i,
147
- :title => /\s*\b(sir|lord|count(ess)?|(gen|adm|col|maj|capt|cmdr|lt|sgt|cpl|pvt|prof|dr|md|ph\.?d)\.?)(\s+|$)/i,
148
- :suffix => /\s*\b(JR|Jr|jr|SR|Sr|sr|[IVX]{2,})(\.|\b)/,
149
- :appellation => /\s*\b((mrs?|ms|fr|hr)\.?|miss|herr|frau)(\s+|$)/i
150
- }
151
- end
152
-
153
- def debug?
154
- options[:debug] || ENV['DEBUG']
155
- end
156
-
157
- def separator
158
- options[:separator]
159
- end
160
-
161
- def comma
162
- options[:comma]
163
- end
164
-
165
- def stops
166
- options[:stops]
167
- end
168
-
169
- def title
170
- options[:title]
171
- end
172
-
173
- def suffix
174
- options[:suffix]
175
- end
176
-
177
- def appellation
178
- options[:appellation]
179
- end
180
-
181
- def prefer_comma_as_separator?
182
- options[:prefer_comma_as_separator]
183
- end
184
-
185
- def parse(input)
186
- parse!(input)
187
- rescue => e
188
- warn e.message if debug?
189
- []
190
- end
191
-
192
- def parse!(string)
193
- input.string = normalize(string)
194
- reset
195
- do_parse
196
- end
197
-
198
- def normalize(string)
199
- string = string.strip
200
- string
201
- end
202
-
203
- def reset
204
- @commas, @words, @initials, @suffices, @yydebug = 0, 0, 0, 0, debug?
205
- self
206
- end
207
-
208
- private
209
-
210
- def stack
211
- @vstack || @racc_vstack || []
212
- end
213
-
214
- def last_token
215
- stack[-1]
216
- end
217
-
218
- def consume_separator
219
- return next_token if seen_separator?
220
- @commas, @words, @initials, @suffices = 0, 0, 0, 0
221
- [:AND, :AND]
222
- end
223
-
224
- def consume_comma
225
- @commas += 1
226
- [:COMMA, :COMMA]
227
- end
228
-
229
- def consume_word(type, word)
230
- @words += 1
231
-
232
- case type
233
- when :UWORD
234
- @initials += 1 if word =~ /^[[:upper:]]+\b/
235
- when :SUFFIX
236
- @suffices += 1
237
- end
238
-
239
- [type, word]
240
- end
241
-
242
- def seen_separator?
243
- !stack.empty? && last_token == :AND
244
- end
245
-
246
- def suffix?
247
- !@suffices.zero? || will_see_suffix?
248
- end
249
-
250
- def will_see_suffix?
251
- input.peek(8).to_s.strip.split(/\s+/)[0] =~ suffix
252
- end
253
-
254
- def will_see_initial?
255
- input.peek(6).to_s.strip.split(/\s+/)[0] =~ /^[[:upper:]]+\b/
256
- end
257
-
258
- def seen_full_name?
259
- prefer_comma_as_separator? && @words > 1 &&
260
- (@initials > 0 || !will_see_initial?) && !will_see_suffix?
261
- end
262
-
263
- def next_token
264
- case
265
- when input.nil?, input.eos?
266
- nil
267
- when input.scan(separator)
268
- consume_separator
269
- when input.scan(/\s*#{comma}\s*/)
270
- if @commas.zero? && !seen_full_name? || @commas == 1 && suffix?
271
- consume_comma
272
- else
273
- consume_separator
274
- end
275
- when input.scan(/\s+/)
276
- next_token
277
- when input.scan(title)
278
- consume_word(:TITLE, input.matched.strip)
279
- when input.scan(suffix)
280
- consume_word(:SUFFIX, input.matched.strip)
281
- when input.scan(appellation)
282
- [:APPELLATION, input.matched.strip]
283
- when input.scan(/((\\\w+)?\{[^\}]*\})*[[:upper:]][^\s#{stops}]*/)
284
- consume_word(:UWORD, input.matched)
285
- when input.scan(/((\\\w+)?\{[^\}]*\})*[[:lower:]][^\s#{stops}]*/)
286
- consume_word(:LWORD, input.matched)
287
- when input.scan(/(\\\w+)?\{[^\}]*\}[^\s#{stops}]*/)
288
- consume_word(:PWORD, input.matched)
289
- when input.scan(/('[^'\n]+')|("[^"\n]+")/)
290
- consume_word(:NICK, input.matched[1...-1])
291
- else
292
- raise ArgumentError,
293
- "Failed to parse name #{input.string.inspect}: unmatched data at offset #{input.pos}"
294
- end
295
- end
296
-
297
- def on_error(tid, value, stack)
298
- raise ArgumentError,
299
- "Failed to parse name: unexpected '#{value}' at #{stack.inspect}"
300
- end
301
-
302
- # -*- racc -*-