racc 1.4.14 → 1.4.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +5 -5
  2. data/Manifest.txt +50 -0
  3. data/ext/racc/com/headius/racc/Cparse.java +66 -23
  4. data/ext/racc/cparse.c +1 -1
  5. data/ext/racc/depend +1 -1
  6. data/lib/racc/info.rb +2 -2
  7. data/test/assets/bibtex.y +141 -0
  8. data/test/assets/cadenza.y +170 -0
  9. data/test/assets/cast.y +926 -0
  10. data/test/assets/csspool.y +729 -0
  11. data/test/assets/edtf.y +583 -0
  12. data/test/assets/huia.y +318 -0
  13. data/test/assets/journey.y +47 -0
  14. data/test/assets/liquor.y +313 -0
  15. data/test/assets/machete.y +423 -0
  16. data/test/assets/macruby.y +2197 -0
  17. data/test/assets/mediacloth.y +599 -0
  18. data/test/assets/mof.y +649 -0
  19. data/test/assets/namae.y +302 -0
  20. data/test/assets/nasl.y +626 -0
  21. data/test/assets/nokogiri-css.y +255 -0
  22. data/test/assets/opal.y +1807 -0
  23. data/test/assets/php_serialization.y +98 -0
  24. data/test/assets/rdblockparser.y +576 -0
  25. data/test/assets/rdinlineparser.y +561 -0
  26. data/test/assets/riml.y +665 -0
  27. data/test/assets/ruby18.y +1943 -0
  28. data/test/assets/ruby19.y +2174 -0
  29. data/test/assets/ruby20.y +2350 -0
  30. data/test/assets/ruby21.y +2359 -0
  31. data/test/assets/ruby22.y +2381 -0
  32. data/test/assets/tp_plus.y +622 -0
  33. data/test/assets/twowaysql.y +278 -0
  34. data/test/helper.rb +31 -15
  35. data/test/regress/bibtex +474 -0
  36. data/test/regress/cadenza +796 -0
  37. data/test/regress/cast +3425 -0
  38. data/test/regress/csspool +2318 -0
  39. data/test/regress/edtf +1794 -0
  40. data/test/regress/huia +1392 -0
  41. data/test/regress/journey +222 -0
  42. data/test/regress/liquor +885 -0
  43. data/test/regress/machete +833 -0
  44. data/test/regress/mediacloth +1463 -0
  45. data/test/regress/mof +1368 -0
  46. data/test/regress/namae +634 -0
  47. data/test/regress/nasl +2058 -0
  48. data/test/regress/nokogiri-css +836 -0
  49. data/test/regress/opal +6429 -0
  50. data/test/regress/php_serialization +336 -0
  51. data/test/regress/rdblockparser +1061 -0
  52. data/test/regress/rdinlineparser +1243 -0
  53. data/test/regress/riml +3297 -0
  54. data/test/regress/ruby18 +6351 -0
  55. data/test/regress/ruby22 +7456 -0
  56. data/test/regress/tp_plus +1933 -0
  57. data/test/regress/twowaysql +556 -0
  58. data/test/test_racc_command.rb +177 -0
  59. metadata +75 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bc823e3d2f74302a78716da88054a9c139fef28c
4
- data.tar.gz: 846089f41620044090f7f1f8c0ffc8c8d2b048a4
2
+ SHA256:
3
+ metadata.gz: '087cab6833c9ff39a56748e88d6774c2d4d2e89ed17bf25e5445b5d6fa445246'
4
+ data.tar.gz: 124e081f970a69af82ad769e9e1bba21d77a445b57d4842c29f80cea23d4a2fb
5
5
  SHA512:
6
- metadata.gz: 9c4d722765b8ba6d9dccfb917d611a0f08787a39376ec89711269c578355a1fee56fe7bc94539f679279311be73ac1048f8b8287d15baa224ebb9aa86ef989a5
7
- data.tar.gz: e48b9d8d038fe05a2f8073613fc2d674eef9ea2b4ba8060d6a6f5dc059f38cd5260604f42a6505d2aa509822bb1e177c203625b307d58f74725400ecaeca883e
6
+ metadata.gz: 4872a9290181db312d35e21c3cd23996f4c1e5766b5dc956983c3c60d374a333d6a36923852d57e5274e04036f5cd3ac85e2c7e36b2f4490ee732b38feb93aa8
7
+ data.tar.gz: e013f560178621e9a3b2e90ce74bcdcbb0c023b1c09b7df6dfcb64fb6ed8a8e0dc0d7e5b674b8508506e2980b09d8e330e0e7737c662a6d403572783d4bcfbb4
@@ -56,36 +56,86 @@ sample/yyerr.y
56
56
  setup.rb
57
57
  tasks/doc.rb
58
58
  tasks/email.rb
59
+ test/assets/bibtex.y
60
+ test/assets/cadenza.y
61
+ test/assets/cast.y
59
62
  test/assets/chk.y
60
63
  test/assets/conf.y
64
+ test/assets/csspool.y
61
65
  test/assets/digraph.y
62
66
  test/assets/echk.y
67
+ test/assets/edtf.y
63
68
  test/assets/err.y
64
69
  test/assets/error_recovery.y
65
70
  test/assets/expect.y
66
71
  test/assets/firstline.y
72
+ test/assets/huia.y
67
73
  test/assets/ichk.y
68
74
  test/assets/intp.y
75
+ test/assets/journey.y
76
+ test/assets/liquor.y
77
+ test/assets/machete.y
78
+ test/assets/macruby.y
79
+ test/assets/mediacloth.y
69
80
  test/assets/mailp.y
81
+ test/assets/mof.y
82
+ test/assets/namae.y
83
+ test/assets/nasl.y
70
84
  test/assets/newsyn.y
71
85
  test/assets/noend.y
86
+ test/assets/nokogiri-css.y
72
87
  test/assets/nonass.y
73
88
  test/assets/normal.y
74
89
  test/assets/norule.y
75
90
  test/assets/nullbug1.y
76
91
  test/assets/nullbug2.y
92
+ test/assets/opal.y
77
93
  test/assets/opt.y
78
94
  test/assets/percent.y
95
+ test/assets/php_serialization.y
96
+ test/assets/rdblockparser.y
97
+ test/assets/rdinlineparser.y
79
98
  test/assets/recv.y
99
+ test/assets/riml.y
80
100
  test/assets/rrconf.y
101
+ test/assets/ruby18.y
102
+ test/assets/ruby19.y
103
+ test/assets/ruby20.y
104
+ test/assets/ruby21.y
105
+ test/assets/ruby22.y
81
106
  test/assets/scan.y
82
107
  test/assets/syntax.y
108
+ test/assets/tp_plus.y
109
+ test/assets/twowaysql.y
83
110
  test/assets/unterm.y
84
111
  test/assets/useless.y
85
112
  test/assets/yyerr.y
86
113
  test/bench.y
87
114
  test/helper.rb
88
115
  test/infini.y
116
+ test/regress/bibtex
117
+ test/regress/cadenza
118
+ test/regress/cast
119
+ test/regress/csspool
120
+ test/regress/edtf
121
+ test/regress/journey
122
+ test/regress/huia
123
+ test/regress/liquor
124
+ test/regress/machete
125
+ test/regress/mediacloth
126
+ test/regress/mof
127
+ test/regress/namae
128
+ test/regress/nasl
129
+ test/regress/nokogiri-css
130
+ test/regress/opal
131
+ test/regress/php_serialization
132
+ test/regress/rdblockparser
133
+ test/regress/rdinlineparser
134
+ test/regress/riml
135
+ test/regress/ruby18
136
+ test/regress/ruby22
137
+ test/regress/tp_plus
138
+ test/regress/twowaysql
89
139
  test/scandata/brace
90
140
  test/scandata/gvar
91
141
  test/scandata/normal
@@ -1,3 +1,17 @@
1
+ /*
2
+ Cparse.java -- Racc Runtime Core for JRuby
3
+
4
+ Copyright (c) 2016 Charles Oliver Nutter <headius@headius.com>
5
+
6
+ Ported from and distributed under the same licence as cparse.c
7
+
8
+ cparse.c -- Racc Runtime Core
9
+
10
+ Copyright (c) 1999-2006 Minero Aoki
11
+
12
+ This library is free software.
13
+ You can distribute/modify this program under the same terms of ruby.
14
+ */
1
15
  package com.headius.racc;
2
16
 
3
17
  import org.jruby.Ruby;
@@ -7,6 +21,7 @@ import org.jruby.RubyClass;
7
21
  import org.jruby.RubyContinuation;
8
22
  import org.jruby.RubyFixnum;
9
23
  import org.jruby.RubyHash;
24
+ import org.jruby.RubyKernel;
10
25
  import org.jruby.RubyModule;
11
26
  import org.jruby.RubyNumeric;
12
27
  import org.jruby.RubyObject;
@@ -24,13 +39,14 @@ import org.jruby.runtime.CallSite;
24
39
  import org.jruby.runtime.Helpers;
25
40
  import org.jruby.runtime.MethodIndex;
26
41
  import org.jruby.runtime.ObjectAllocator;
42
+ import org.jruby.runtime.Signature;
27
43
  import org.jruby.runtime.ThreadContext;
28
44
  import org.jruby.runtime.Visibility;
29
45
  import org.jruby.runtime.builtin.IRubyObject;
30
46
  import org.jruby.runtime.load.Library;
31
47
 
32
48
  public class Cparse implements Library {
33
- public static final String RACC_VERSION = "1.4.14"; // TODO: parse from Cparse.c
49
+ public static final String RACC_VERSION = "1.4.15"; // TODO: parse from Cparse.c
34
50
 
35
51
  public enum TokenType {
36
52
  DEFAULT(-1),
@@ -233,10 +249,6 @@ public class Cparse implements Library {
233
249
  shift(context, act, tok, val);
234
250
  }
235
251
 
236
- private int REDUCE(ThreadContext context, int act) {
237
- return reduce(context, act);
238
- }
239
-
240
252
  public void parse_main(ThreadContext context, IRubyObject tok, IRubyObject val, boolean resume) {
241
253
  Ruby runtime = context.runtime;
242
254
 
@@ -267,7 +279,7 @@ public class Cparse implements Library {
267
279
  i = assert_integer(tmp);
268
280
 
269
281
  D_printf("read_next=%d\n", read_next);
270
- if (read_next && (this.t != vFINAL_TOKEN)) {
282
+ if (read_next && (!this.t.equals(vFINAL_TOKEN))) {
271
283
  if (this.lex_is_iterator) {
272
284
  D_puts("resuming...");
273
285
  if (this.fin != 0) throw runtime.newArgumentError("token given after EOF");
@@ -354,7 +366,21 @@ public class Cparse implements Library {
354
366
  }
355
367
  else if (act < 0 && act > -(this.reduce_n)) {
356
368
  D_puts("reduce");
357
- REDUCE(context, act);
369
+ { // macro REDUCE
370
+ switch (reduce(context, act)) {
371
+ case 0: /* normal */
372
+ break;
373
+ case 1: /* yyerror */
374
+ branch = USER_YYERROR;
375
+ continue BRANCH;
376
+ case 2: /* yyaccept */
377
+ D_puts("u accept");
378
+ branch = ACCEPT;
379
+ continue BRANCH;
380
+ default:
381
+ break;
382
+ }
383
+ }
358
384
  }
359
385
  else if (act == -(this.reduce_n)) {
360
386
  branch = ERROR; continue BRANCH;
@@ -367,6 +393,7 @@ public class Cparse implements Library {
367
393
  throw runtime.newRaiseException(RaccBug, "[Cparse Bug] unknown act value " + act);
368
394
  }
369
395
 
396
+ // fall through
370
397
  case ERROR_RECOVERED:
371
398
 
372
399
  if (this.debug) {
@@ -389,9 +416,10 @@ public class Cparse implements Library {
389
416
  call_onerror.call(context, this.parser, this.parser, this.t, val, this.vstack);
390
417
  }
391
418
 
419
+ // fall through
392
420
  case USER_YYERROR:
393
421
  if (this.errstatus == 3) {
394
- if (this.t == vFINAL_TOKEN) {
422
+ if (this.t.equals(vFINAL_TOKEN)) {
395
423
  this.retval = runtime.getFalse();
396
424
  this.fin = CP_FIN_EOT;
397
425
  return;
@@ -464,7 +492,21 @@ public class Cparse implements Library {
464
492
  }
465
493
  else if (act < 0 && act > -(this.reduce_n)) {
466
494
  D_puts("e reduce");
467
- REDUCE(context, act);
495
+ { // macro REDUCE
496
+ switch (reduce(context, act)) {
497
+ case 0: /* normal */
498
+ break;
499
+ case 1: /* yyerror */
500
+ branch = USER_YYERROR;
501
+ continue BRANCH;
502
+ case 2: /* yyaccept */
503
+ D_puts("u accept");
504
+ branch = ACCEPT;
505
+ continue BRANCH;
506
+ default:
507
+ break;
508
+ }
509
+ }
468
510
  }
469
511
  else if (act == this.shift_n) {
470
512
  D_puts("e accept");
@@ -489,17 +531,18 @@ public class Cparse implements Library {
489
531
  }
490
532
 
491
533
  private int reduce(ThreadContext context, int act) {
492
- IRubyObject code;
493
534
  ruleno = -act * 3;
494
535
  IRubyObject tag = context.runtime.newSymbol("racc_jump");
495
- RubyContinuation rbContinuation = new RubyContinuation(context.runtime, context.runtime.newSymbol("racc_jump"));
496
- try {
497
- context.pushCatch(rbContinuation.getContinuation());
498
- code = reduce0(context);
499
- errstatus = assert_integer(parser.getInstanceVariable(ID_ERRSTATUS));
500
- } finally {
501
- context.popCatch();
502
- }
536
+ IRubyObject code = RubyKernel.rbCatch19(context, this,
537
+ tag,
538
+ CallBlock19.newCallClosure(this, getMetaClass(), Signature.NO_ARGUMENTS,
539
+ new BlockCallback() {
540
+ @Override
541
+ public IRubyObject call(ThreadContext context, IRubyObject[] args, Block block) {
542
+ return reduce0(context);
543
+ }
544
+ }, context));
545
+ errstatus = assert_integer(parser.getInstanceVariable(ID_ERRSTATUS));
503
546
  return assert_integer(code);
504
547
  }
505
548
 
@@ -527,13 +570,13 @@ public class Cparse implements Library {
527
570
  /* call action */
528
571
  if (len == 0) {
529
572
  tmp = context.nil;
530
- if (mid != sym_noreduce)
573
+ if (!mid.equals(sym_noreduce))
531
574
  tmp_v = runtime.newArray();
532
575
  if (this.debug)
533
576
  tmp_t = runtime.newArray();
534
577
  }
535
578
  else {
536
- if (mid != sym_noreduce) {
579
+ if (!mid.equals(sym_noreduce)) {
537
580
  tmp_v = GET_TAIL(context, this.vstack, len);
538
581
  tmp = ((RubyArray)tmp_v).entry(0);
539
582
  }
@@ -547,7 +590,7 @@ public class Cparse implements Library {
547
590
  }
548
591
  CUT_TAIL(context, this.state, len);
549
592
  }
550
- if (mid != sym_noreduce) {
593
+ if (!mid.equals(sym_noreduce)) {
551
594
  if (this.use_result_var) {
552
595
  tmp = Helpers.invoke(context, this.parser, mid.toString(), tmp_v, this.vstack, tmp);
553
596
  }
@@ -590,7 +633,7 @@ public class Cparse implements Library {
590
633
  D_puts("(goto) check[i] == nil");
591
634
  branch = NOTFOUND; continue BRANCH;
592
635
  }
593
- if (tmp != runtime.newFixnum(k1)) {
636
+ if (!tmp.equals(runtime.newFixnum(k1))) {
594
637
  D_puts("(goto) check[i] != table[i]");
595
638
  branch = NOTFOUND; continue BRANCH;
596
639
  }
@@ -759,7 +802,7 @@ public class Cparse implements Library {
759
802
  }
760
803
  }, context));
761
804
  } catch (LexerUnroll maybeOurs) {
762
- if (maybeOurs == lexerUnroll) {
805
+ if (maybeOurs.equals(lexerUnroll)) {
763
806
  return;
764
807
  }
765
808
  }
@@ -17,7 +17,7 @@
17
17
  Important Constants
18
18
  ----------------------------------------------------------------------- */
19
19
 
20
- #define RACC_VERSION "1.4.14"
20
+ #define RACC_VERSION "1.4.15"
21
21
 
22
22
  #define DEFAULT_TOKEN -1
23
23
  #define ERROR_TOKEN 1
@@ -1 +1 @@
1
- cparse.o: cparse.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h
1
+ cparse.o: cparse.c $(hdrdir)/ruby/ruby.h $(topdir)/config.h $(hdrdir)/ruby/defines.h
@@ -1,5 +1,5 @@
1
1
  #
2
- # $Id: 22e498362c014749b453953e8d986243c0b8660c $
2
+ # $Id: cb493ec682225ae384145f255590797788f7ef12 $
3
3
  #
4
4
  # Copyright (c) 1999-2006 Minero Aoki
5
5
  #
@@ -10,7 +10,7 @@
10
10
  #
11
11
 
12
12
  module Racc
13
- VERSION = '1.4.14'
13
+ VERSION = '1.4.15'
14
14
  Version = VERSION
15
15
  Copyright = 'Copyright (c) 1999-2006 Minero Aoki'
16
16
  end
@@ -0,0 +1,141 @@
1
+ #--
2
+ # BibTeX-Ruby
3
+ # Copyright (C) 2010-2011 Sylvester Keil <http://sylvester.keil.or.at>
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU General Public License as published by
7
+ # the Free Software Foundation, either version 3 of the License, or
8
+ # (at your option) any later version.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU General Public License
16
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+ #++
18
+ #
19
+ # A BibTeX grammar for the parser generator +racc+
20
+ #
21
+
22
+ # -*- racc -*-
23
+
24
+ class BibTeX::Parser
25
+
26
+ token AT COMMA COMMENT CONTENT ERROR EQ LBRACE META_CONTENT KEY
27
+ NAME NUMBER PREAMBLE RBRACE SHARP STRING STRING_LITERAL
28
+
29
+ expect 0
30
+
31
+ rule
32
+
33
+ bibliography : /* empty */ { result = BibTeX::Bibliography.new(@options) }
34
+ | objects { result = val[0] }
35
+
36
+ objects : object { result = BibTeX::Bibliography.new(@options) << val[0] }
37
+ | objects object { result << val[1] }
38
+
39
+ object : AT at_object { result = val[1] }
40
+ | META_CONTENT { result = BibTeX::MetaContent.new(val[0]) }
41
+ | ERROR { result = BibTeX::Error.new(val[0]) }
42
+
43
+ at_object : comment { result = val[0] }
44
+ | string { result = val[0] }
45
+ | preamble { result = val[0] }
46
+ | entry { result = val[0] }
47
+
48
+ comment : COMMENT LBRACE content RBRACE { result = BibTeX::Comment.new(val[2]) }
49
+
50
+ content : /* empty */ { result = '' }
51
+ | CONTENT { result = val[0] }
52
+
53
+ preamble : PREAMBLE LBRACE string_value RBRACE { result = BibTeX::Preamble.new(val[2]) }
54
+
55
+ string : STRING LBRACE string_assignment RBRACE { result = BibTeX::String.new(val[2][0],val[2][1]); }
56
+
57
+ string_assignment : NAME EQ string_value { result = [val[0].downcase.to_sym, val[2]] }
58
+
59
+ string_value : string_literal { result = [val[0]] }
60
+ | string_value SHARP string_literal { result << val[2] }
61
+
62
+ string_literal : NAME { result = val[0].downcase.to_sym }
63
+ | LBRACE content RBRACE { result = val[1] }
64
+ | STRING_LITERAL { result = val[0] }
65
+
66
+ entry : entry_head assignments RBRACE { result = val[0] << val[1] }
67
+ | entry_head assignments COMMA RBRACE { result = val[0] << val[1] }
68
+ | entry_head RBRACE { result = val[0] }
69
+
70
+ entry_head : NAME LBRACE opt_key { result = BibTeX::Entry.new(:bibtex_type => val[0].downcase.to_sym, :bibtex_key => val[2]) }
71
+
72
+ opt_key : { missing_key }
73
+ | KEY
74
+
75
+ assignments : assignment { result = val[0] }
76
+ | assignments COMMA assignment { result.merge!(val[2]) }
77
+
78
+ assignment : NAME EQ value { result = { val[0].downcase.to_sym => val[2] } }
79
+
80
+ value : string_value { result = val[0] }
81
+ | NUMBER { result = val[0] }
82
+
83
+ end
84
+
85
+ ---- header
86
+ require 'bibtex/lexer'
87
+
88
+ ---- inner
89
+
90
+ attr_reader :lexer, :options
91
+
92
+ @defaults = {
93
+ :include => [:errors],
94
+ :allow_missing_keys => false,
95
+ :debug => false
96
+ }.freeze
97
+
98
+ class << self
99
+ attr_reader :defaults
100
+ end
101
+
102
+ def initialize(options = {})
103
+ @options = Parser.defaults.merge(options)
104
+ @lexer = Lexer.new(@options)
105
+ end
106
+
107
+ def parse(input)
108
+ @yydebug = debug?
109
+
110
+ lexer.analyse(input)
111
+ do_parse
112
+ #yyparse(@lexer,:each)
113
+ end
114
+
115
+ def next_token
116
+ lexer.next_token
117
+ end
118
+
119
+ def debug?
120
+ options[:debug] || ENV['DEBUG']
121
+ end
122
+
123
+ def allow_missing_keys?
124
+ options[:allow_missing_keys]
125
+ end
126
+
127
+ def missing_key
128
+ unless allow_missing_keys?
129
+ raise ParseError, "Failed to parse BibTeX entry: cite-key missing"
130
+ end
131
+ end
132
+
133
+ def on_error(tid, val, vstack)
134
+ message =
135
+ "Failed to parse BibTeX on value #{val.inspect} (#{token_to_str(tid) || '?'}) #{ vstack.inspect}"
136
+
137
+ BibTeX.log.error message
138
+ raise ParseError, message
139
+ end
140
+
141
+ # -*- racc -*-