racc 1.4.14-java → 1.4.15-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) 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/cparse-jruby.jar +0 -0
  7. data/lib/racc/info.rb +2 -2
  8. data/test/assets/bibtex.y +141 -0
  9. data/test/assets/cadenza.y +170 -0
  10. data/test/assets/cast.y +926 -0
  11. data/test/assets/csspool.y +729 -0
  12. data/test/assets/edtf.y +583 -0
  13. data/test/assets/huia.y +318 -0
  14. data/test/assets/journey.y +47 -0
  15. data/test/assets/liquor.y +313 -0
  16. data/test/assets/machete.y +423 -0
  17. data/test/assets/macruby.y +2197 -0
  18. data/test/assets/mediacloth.y +599 -0
  19. data/test/assets/mof.y +649 -0
  20. data/test/assets/namae.y +302 -0
  21. data/test/assets/nasl.y +626 -0
  22. data/test/assets/nokogiri-css.y +255 -0
  23. data/test/assets/opal.y +1807 -0
  24. data/test/assets/php_serialization.y +98 -0
  25. data/test/assets/rdblockparser.y +576 -0
  26. data/test/assets/rdinlineparser.y +561 -0
  27. data/test/assets/riml.y +665 -0
  28. data/test/assets/ruby18.y +1943 -0
  29. data/test/assets/ruby19.y +2174 -0
  30. data/test/assets/ruby20.y +2350 -0
  31. data/test/assets/ruby21.y +2359 -0
  32. data/test/assets/ruby22.y +2381 -0
  33. data/test/assets/tp_plus.y +622 -0
  34. data/test/assets/twowaysql.y +278 -0
  35. data/test/helper.rb +50 -34
  36. data/test/regress/bibtex +474 -0
  37. data/test/regress/cadenza +796 -0
  38. data/test/regress/cast +3425 -0
  39. data/test/regress/csspool +2318 -0
  40. data/test/regress/edtf +1794 -0
  41. data/test/regress/huia +1392 -0
  42. data/test/regress/journey +222 -0
  43. data/test/regress/liquor +885 -0
  44. data/test/regress/machete +833 -0
  45. data/test/regress/mediacloth +1463 -0
  46. data/test/regress/mof +1368 -0
  47. data/test/regress/namae +634 -0
  48. data/test/regress/nasl +2058 -0
  49. data/test/regress/nokogiri-css +836 -0
  50. data/test/regress/opal +6429 -0
  51. data/test/regress/php_serialization +336 -0
  52. data/test/regress/rdblockparser +1061 -0
  53. data/test/regress/rdinlineparser +1243 -0
  54. data/test/regress/riml +3297 -0
  55. data/test/regress/ruby18 +6351 -0
  56. data/test/regress/ruby22 +7456 -0
  57. data/test/regress/tp_plus +1933 -0
  58. data/test/regress/twowaysql +556 -0
  59. data/test/test_racc_command.rb +177 -0
  60. metadata +80 -25
  61. data/.gemtest +0 -0
@@ -0,0 +1,649 @@
1
+ # Distributed under the Ruby license
2
+ # See http://www.ruby-lang.org/en/LICENSE.txt for the full license text
3
+ # Copyright (c) 2010 Klaus Kämpf <kkaempf@suse.de>
4
+
5
+ /*
6
+ * According to appendix A of
7
+ * http://www.dmtf.org/standards/cim/cim_spec_v22
8
+ */
9
+
10
+ class MOF::Parser
11
+ prechigh
12
+ /* nonassoc UMINUS */
13
+ left '*' '/'
14
+ left '+' '-'
15
+ preclow
16
+
17
+ token PRAGMA INCLUDE IDENTIFIER CLASS ASSOCIATION INDICATION
18
+ AMENDED ENABLEOVERRIDE DISABLEOVERRIDE RESTRICTED TOSUBCLASS TOINSTANCE
19
+ TRANSLATABLE QUALIFIER SCOPE SCHEMA PROPERTY REFERENCE
20
+ METHOD PARAMETER FLAVOR INSTANCE
21
+ AS REF ANY OF
22
+ DT_VOID
23
+ DT_UINT8 DT_SINT8 DT_UINT16 DT_SINT16 DT_UINT32 DT_SINT32
24
+ DT_UINT64 DT_SINT64 DT_REAL32 DT_REAL64 DT_CHAR16 DT_STR
25
+ DT_BOOLEAN DT_DATETIME
26
+ positiveDecimalValue
27
+ stringValue
28
+ realValue
29
+ charValue
30
+ booleanValue
31
+ nullValue
32
+ binaryValue
33
+ octalValue
34
+ decimalValue
35
+ hexValue
36
+
37
+ rule
38
+
39
+ /* Returns a Hash of filename and MofResult */
40
+ mofSpecification
41
+ : /* empty */
42
+ { result = Hash.new }
43
+ | mofProduction
44
+ { result = { @name => @result } }
45
+ | mofSpecification mofProduction
46
+ { result = val[0]
47
+ result[@name] = @result
48
+ }
49
+ ;
50
+
51
+ mofProduction
52
+ : compilerDirective
53
+ | classDeclaration
54
+ { #puts "Class '#{val[0].name}'"
55
+ @result.classes << val[0]
56
+ }
57
+ | qualifierDeclaration
58
+ { @result.qualifiers << val[0]
59
+ @qualifiers[val[0].name.downcase] = val[0]
60
+ }
61
+ | instanceDeclaration
62
+ { @result.instances << val[0] }
63
+ ;
64
+
65
+ /***
66
+ * compilerDirective
67
+ *
68
+ */
69
+
70
+ compilerDirective
71
+ : "#" PRAGMA INCLUDE pragmaParameters_opt
72
+ { raise MOF::Helper::Error.new(@name,@lineno,@line,"Missing filename after '#pragma include'") unless val[3]
73
+ open val[3], :pragma
74
+ }
75
+ | "#" PRAGMA pragmaName pragmaParameters_opt
76
+ | "#" INCLUDE pragmaParameters_opt
77
+ { raise StyleError.new(@name,@lineno,@line,"Use '#pragma include' instead of '#include'") unless @style == :wmi
78
+ raise MOF::Helper::Error.new(@name,@lineno,@line,"Missing filename after '#include'") unless val[2]
79
+ open val[2], :pragma
80
+ }
81
+ ;
82
+
83
+ pragmaName
84
+ : IDENTIFIER
85
+ ;
86
+
87
+ pragmaParameters_opt
88
+ : /* empty */
89
+ { raise StyleError.new(@name,@lineno,@line,"#pragma parameter missing") unless @style == :wmi }
90
+ | "(" pragmaParameterValues ")"
91
+ { result = val[1] }
92
+ ;
93
+
94
+ pragmaParameterValues
95
+ : pragmaParameterValue
96
+ | pragmaParameterValues "," pragmaParameterValue
97
+ ;
98
+
99
+ pragmaParameterValue
100
+ : string
101
+ | integerValue
102
+ { raise StyleError.new(@name,@lineno,@line,"#pragma parameter missing") unless @style == :wmi }
103
+ | IDENTIFIER
104
+ ;
105
+
106
+ /***
107
+ * classDeclaration
108
+ *
109
+ */
110
+
111
+ classDeclaration
112
+ : qualifierList_opt CLASS className alias_opt superClass_opt "{" classFeatures "}" ";"
113
+ { qualifiers = val[0]
114
+ features = val[6]
115
+ # FIXME: features must not include references
116
+ result = CIM::Class.new(val[2],qualifiers,val[3],val[4],features)
117
+ }
118
+ ;
119
+
120
+ classFeatures
121
+ : /* empty */
122
+ { result = [] }
123
+ | classFeatures classFeature
124
+ { result = val[0] << val[1] }
125
+ ;
126
+
127
+ classFeature
128
+ : propertyDeclaration
129
+ | methodDeclaration
130
+ | referenceDeclaration /* must have association qualifier */
131
+ ;
132
+
133
+
134
+ qualifierList_opt
135
+ : /* empty */
136
+ | qualifierList
137
+ { result = CIM::QualifierSet.new val[0] }
138
+ ;
139
+
140
+ qualifierList
141
+ : "[" qualifier qualifiers "]"
142
+ { result = val[2]
143
+ result.unshift val[1] if val[1] }
144
+ ;
145
+
146
+ qualifiers
147
+ : /* empty */
148
+ { result = [] }
149
+ | qualifiers "," qualifier
150
+ { result = val[0]
151
+ result << val[2] if val[2]
152
+ }
153
+ ;
154
+
155
+ qualifier
156
+ : qualifierName qualifierParameter_opt flavor_opt
157
+ { # Get qualifier decl
158
+ qualifier = case val[0]
159
+ when CIM::Qualifier then val[0].definition
160
+ when CIM::QualifierDeclaration then val[0]
161
+ when String then @qualifiers[val[0].downcase]
162
+ else
163
+ nil
164
+ end
165
+ raise MOF::Helper::Error.new(@name,@lineno,@line,"'#{val[0]}' is not a valid qualifier") unless qualifier
166
+ value = val[1]
167
+ raise MOF::Helper::Error.new(@name,@lineno,@line,"#{value.inspect} does not match qualifier type '#{qualifier.type}'") unless qualifier.type.matches?(value)||@style == :wmi
168
+ # Don't propagate a boolean 'false'
169
+ if qualifier.type == :boolean && value == false
170
+ result = nil
171
+ else
172
+ result = CIM::Qualifier.new(qualifier,value,val[2])
173
+ end
174
+ }
175
+ ;
176
+
177
+ flavor_opt
178
+ : /* empty */
179
+ | ":" flavor
180
+ { result = CIM::QualifierFlavors.new val[1] }
181
+ ;
182
+
183
+ qualifierParameter_opt
184
+ : /* empty */
185
+ | qualifierParameter
186
+ ;
187
+
188
+ qualifierParameter
189
+ : "(" constantValue ")"
190
+ { result = val[1] }
191
+ | arrayInitializer
192
+ ;
193
+
194
+ /* CIM::Flavors */
195
+ flavor
196
+ : AMENDED | ENABLEOVERRIDE | DISABLEOVERRIDE | RESTRICTED | TOSUBCLASS | TRANSLATABLE | TOINSTANCE
197
+ { case val[0].to_sym
198
+ when :amended, :toinstance
199
+ raise StyleError.new(@name,@lineno,@line,"'#{val[0]}' is not a valid flavor") unless @style == :wmi
200
+ end
201
+ }
202
+ ;
203
+
204
+ alias_opt
205
+ : /* empty */
206
+ | alias
207
+ ;
208
+
209
+ superClass_opt
210
+ : /* empty */
211
+ | superClass
212
+ ;
213
+
214
+ className
215
+ : IDENTIFIER /* must be <schema>_<classname> in CIM v2.x */
216
+ { raise ParseError.new("Class name must be prefixed by '<schema>_'") unless val[0].include?("_") || @style == :wmi }
217
+ ;
218
+
219
+ alias
220
+ : AS aliasIdentifier
221
+ { result = val[1] }
222
+ ;
223
+
224
+ aliasIdentifier
225
+ : "$" IDENTIFIER /* NO whitespace ! */
226
+ { result = val[1] }
227
+ ;
228
+
229
+ superClass
230
+ : ":" className
231
+ { result = val[1] }
232
+ ;
233
+
234
+
235
+ propertyDeclaration
236
+ : qualifierList_opt dataType propertyName array_opt defaultValue_opt ";"
237
+ { if val[3]
238
+ type = CIM::Array.new val[3],val[1]
239
+ else
240
+ type = val[1]
241
+ end
242
+ result = CIM::Property.new(type,val[2],val[0],val[4])
243
+ }
244
+ ;
245
+
246
+ referenceDeclaration
247
+ : qualifierList_opt objectRef referenceName array_opt defaultValue_opt ";"
248
+ { if val[4]
249
+ raise StyleError.new(@name,@lineno,@line,"Array not allowed in reference declaration") unless @style == :wmi
250
+ end
251
+ result = CIM::Reference.new(val[1],val[2],val[0],val[4]) }
252
+ ;
253
+
254
+ methodDeclaration
255
+ : qualifierList_opt dataType methodName "(" parameterList_opt ")" ";"
256
+ { result = CIM::Method.new(val[1],val[2],val[0],val[4]) }
257
+ ;
258
+
259
+ propertyName
260
+ : IDENTIFIER
261
+ | PROPERTY
262
+ { # tmplprov.mof has 'string Property;'
263
+ raise StyleError.new(@name,@lineno,@line,"Invalid keyword '#{val[0]}' used for property name") unless @style == :wmi
264
+ }
265
+ ;
266
+
267
+ referenceName
268
+ : IDENTIFIER
269
+ | INDICATION
270
+ { result = "Indication" }
271
+ ;
272
+
273
+ methodName
274
+ : IDENTIFIER
275
+ ;
276
+
277
+ dataType
278
+ : DT_UINT8
279
+ | DT_SINT8
280
+ | DT_UINT16
281
+ | DT_SINT16
282
+ | DT_UINT32
283
+ | DT_SINT32
284
+ | DT_UINT64
285
+ | DT_SINT64
286
+ | DT_REAL32
287
+ | DT_REAL64
288
+ | DT_CHAR16
289
+ | DT_STR
290
+ | DT_BOOLEAN
291
+ | DT_DATETIME
292
+ | DT_VOID
293
+ { raise StyleError.new(@name,@lineno,@line,"'void' is not a valid datatype") unless @style == :wmi }
294
+ ;
295
+
296
+ objectRef
297
+ : className
298
+ { # WMI uses class names as data types (without REF ?!)
299
+ raise StyleError.new(@name,@lineno,@line,"Expected 'ref' keyword after classname '#{val[0]}'") unless @style == :wmi
300
+ result = CIM::ReferenceType.new val[0]
301
+ }
302
+
303
+ | className REF
304
+ { result = CIM::ReferenceType.new val[0] }
305
+ ;
306
+
307
+ parameterList_opt
308
+ : /* empty */
309
+ | parameterList
310
+ ;
311
+
312
+ parameterList
313
+ : parameter parameters
314
+ { result = val[1].unshift val[0] }
315
+ ;
316
+
317
+ parameters
318
+ : /* empty */
319
+ { result = [] }
320
+ | parameters "," parameter
321
+ { result = val[0] << val[2] }
322
+ ;
323
+
324
+ parameter
325
+ : qualifierList_opt typespec parameterName array_opt parameterValue_opt
326
+ { if val[3]
327
+ type = CIM::Array.new val[3], val[1]
328
+ else
329
+ type = val[1]
330
+ end
331
+ result = CIM::Property.new(type,val[2],val[0])
332
+ }
333
+ ;
334
+
335
+ typespec
336
+ : dataType
337
+ | objectRef
338
+ ;
339
+
340
+ parameterName
341
+ : IDENTIFIER
342
+ ;
343
+
344
+ array_opt
345
+ : /* empty */
346
+ | array
347
+ ;
348
+
349
+ parameterValue_opt
350
+ : /* empty */
351
+ | defaultValue
352
+ { raise "Default parameter value not allowed in syntax style '{@style}'" unless @style == :wmi }
353
+ ;
354
+
355
+ array
356
+ : "[" positiveDecimalValue_opt "]"
357
+ { result = val[1] }
358
+ ;
359
+
360
+ positiveDecimalValue_opt
361
+ : /* empty */
362
+ { result = -1 }
363
+ | positiveDecimalValue
364
+ ;
365
+
366
+ defaultValue_opt
367
+ : /* empty */
368
+ | defaultValue
369
+ ;
370
+
371
+ defaultValue
372
+ : "=" initializer
373
+ { result = val[1] }
374
+ ;
375
+
376
+ initializer
377
+ : constantValue
378
+ | arrayInitializer
379
+ | referenceInitializer
380
+ ;
381
+
382
+ arrayInitializer
383
+ : "{" constantValues "}"
384
+ { result = val[1] }
385
+ ;
386
+
387
+ constantValues
388
+ : /* empty */
389
+ | constantValue
390
+ { result = [ val[0] ] }
391
+ | constantValues "," constantValue
392
+ { result = val[0] << val[2] }
393
+ ;
394
+
395
+ constantValue
396
+ : integerValue
397
+ | realValue
398
+ | charValue
399
+ | string
400
+ | booleanValue
401
+ | nullValue
402
+ | instance
403
+ { raise "Instance as property value not allowed in syntax style '{@style}'" unless @style == :wmi }
404
+ ;
405
+
406
+ integerValue
407
+ : binaryValue
408
+ | octalValue
409
+ | decimalValue
410
+ | positiveDecimalValue
411
+ | hexValue
412
+ ;
413
+
414
+ string
415
+ : stringValue
416
+ | string stringValue
417
+ { result = val[0] + val[1] }
418
+ ;
419
+
420
+ referenceInitializer
421
+ : objectHandle
422
+ | aliasIdentifier
423
+ ;
424
+
425
+ objectHandle
426
+ : namespace_opt modelPath
427
+ ;
428
+
429
+ namespace_opt
430
+ : /* empty */
431
+ | namespaceHandle ":"
432
+ ;
433
+
434
+ namespaceHandle
435
+ : IDENTIFIER
436
+ ;
437
+
438
+ /*
439
+ * Note
440
+ : structure depends on type of namespace
441
+ */
442
+
443
+ modelPath
444
+ : className "." keyValuePairList
445
+ ;
446
+
447
+ keyValuePairList
448
+ : keyValuePair keyValuePairs
449
+ ;
450
+
451
+ keyValuePairs
452
+ : /* empty */
453
+ | keyValuePairs "," keyValuePair
454
+ ;
455
+
456
+ keyValuePair
457
+ : keyname "=" initializer
458
+ ;
459
+
460
+ keyname
461
+ : propertyName | referenceName
462
+ ;
463
+
464
+ /***
465
+ * qualifierDeclaration
466
+ *
467
+ */
468
+
469
+ qualifierDeclaration
470
+ /* 0 1 2 3 4 */
471
+ : QUALIFIER qualifierName qualifierType scope defaultFlavor_opt ";"
472
+ { result = CIM::QualifierDeclaration.new( val[1], val[2][0], val[2][1], val[3], val[4]) }
473
+ ;
474
+
475
+ defaultFlavor_opt
476
+ : /* empty */
477
+ | defaultFlavor
478
+ ;
479
+
480
+ qualifierName
481
+ : IDENTIFIER
482
+ | ASSOCIATION /* meta qualifier */
483
+ | INDICATION /* meta qualifier */
484
+ | REFERENCE /* Added in DSP0004 2.7.0 */
485
+ | SCHEMA
486
+ ;
487
+
488
+ /* [type, value] */
489
+ qualifierType
490
+ : ":" dataType array_opt defaultValue_opt
491
+ { type = val[2].nil? ? val[1] : CIM::Array.new(val[2],val[1])
492
+ result = [ type, val[3] ]
493
+ }
494
+ ;
495
+
496
+ scope
497
+ : "," SCOPE "(" metaElements ")"
498
+ { result = CIM::QualifierScopes.new(val[3]) }
499
+ ;
500
+
501
+ metaElements
502
+ : metaElement
503
+ { result = [ val[0] ] }
504
+ | metaElements "," metaElement
505
+ { result = val[0] << val[2] }
506
+ ;
507
+
508
+ metaElement
509
+ : SCHEMA
510
+ | CLASS
511
+ | ASSOCIATION
512
+ | INDICATION
513
+ | QUALIFIER
514
+ | PROPERTY
515
+ | REFERENCE
516
+ | METHOD
517
+ | PARAMETER
518
+ | ANY
519
+ ;
520
+
521
+ defaultFlavor
522
+ : "," FLAVOR "(" flavors ")"
523
+ { result = CIM::QualifierFlavors.new val[3] }
524
+ ;
525
+
526
+ flavors
527
+ : flavor
528
+ { result = [ val[0] ] }
529
+ | flavors "," flavor
530
+ { result = val[0] << val[2] }
531
+ ;
532
+
533
+ /***
534
+ * instanceDeclaration
535
+ *
536
+ */
537
+
538
+ instanceDeclaration
539
+ : instance ";"
540
+ ;
541
+
542
+ instance
543
+ : qualifierList_opt INSTANCE OF className alias_opt "{" valueInitializers "}"
544
+ ;
545
+
546
+ valueInitializers
547
+ : valueInitializer
548
+ | valueInitializers valueInitializer
549
+ ;
550
+
551
+ valueInitializer
552
+ : qualifierList_opt keyname "=" initializer ";"
553
+ | qualifierList_opt keyname ";"
554
+ { raise "Instance property '#{val[1]} must have a value" unless @style == :wmi }
555
+ ;
556
+
557
+ end # class Parser
558
+
559
+ ---- header ----
560
+
561
+ # parser.rb - generated by racc
562
+
563
+ require 'strscan'
564
+ require 'rubygems'
565
+ require 'cim'
566
+ require File.join(File.dirname(__FILE__), 'result')
567
+ require File.join(File.dirname(__FILE__), 'scanner')
568
+ require File.join(File.dirname(__FILE__), 'helper')
569
+
570
+ ---- inner ----
571
+
572
+ #
573
+ # Initialize MOF::Parser
574
+ # MOF::Parser.new options = {}
575
+ #
576
+ # options -> Hash of options
577
+ # :debug -> boolean
578
+ # :includes -> array of include dirs
579
+ # :style -> :cim or :wmi
580
+ #
581
+ def initialize options = {}
582
+ @yydebug = options[:debug]
583
+ @includes = options[:includes] || []
584
+ @quiet = options[:quiet]
585
+ @style = options[:style] || :cim # default to style CIM v2.2 syntax
586
+
587
+ @lineno = 1
588
+ @file = nil
589
+ @iconv = nil
590
+ @eol = "\n"
591
+ @fname = nil
592
+ @fstack = []
593
+ @in_comment = false
594
+ @seen_files = []
595
+ @qualifiers = {}
596
+ end
597
+
598
+ #
599
+ # Make options hash from argv
600
+ #
601
+ # returns [ files, options ]
602
+ #
603
+
604
+ def self.argv_handler name, argv
605
+ files = []
606
+ options = { :namespace => "" }
607
+ while argv.size > 0
608
+ case opt = argv.shift
609
+ when "-h"
610
+ $stderr.puts "Ruby MOF compiler"
611
+ $stderr.puts "#{name} [-h] [-d] [-I <dir>] [<moffiles>]"
612
+ $stderr.puts "Compiles <moffile>"
613
+ $stderr.puts "\t-d debug"
614
+ $stderr.puts "\t-h this help"
615
+ $stderr.puts "\t-I <dir> include dir"
616
+ $stderr.puts "\t-f force"
617
+ $stderr.puts "\t-n <namespace>"
618
+ $stderr.puts "\t-o <output>"
619
+ $stderr.puts "\t-s <style> syntax style (wmi,cim)"
620
+ $stderr.puts "\t-q quiet"
621
+ $stderr.puts "\t<moffiles> file(s) to read (else use $stdin)"
622
+ exit 0
623
+ when "-f" then options[:force] = true
624
+ when "-s" then options[:style] = argv.shift.to_sym
625
+ when "-d" then options[:debug] = true
626
+ when "-q" then options[:quiet] = true
627
+ when "-I"
628
+ options[:includes] ||= []
629
+ dirname = argv.shift
630
+ unless File.directory?(dirname)
631
+ files << dirname
632
+ dirname = File.dirname(dirname)
633
+ end
634
+ options[:includes] << Pathname.new(dirname)
635
+ when "-n" then options[:namespace] = argv.shift
636
+ when "-o" then options[:output] = argv.shift
637
+ when /^-.+/
638
+ $stderr.puts "Undefined option #{opt}"
639
+ else
640
+ files << opt
641
+ end
642
+ end
643
+ [ files, options ]
644
+ end
645
+
646
+ include Helper
647
+ include Scanner
648
+
649
+ ---- footer ----