zomg 1.0.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.
- data/History.txt +6 -0
- data/Manifest.txt +237 -0
- data/README.txt +59 -0
- data/Rakefile +34 -0
- data/bin/omfg +56 -0
- data/lib/scanner.rex +169 -0
- data/lib/yacc.y +861 -0
- data/lib/zomg.rb +22 -0
- data/lib/zomg/idl.rb +14 -0
- data/lib/zomg/idl/lexer.rb +2151 -0
- data/lib/zomg/idl/nodes/attribute.rb +15 -0
- data/lib/zomg/idl/nodes/binary.rb +19 -0
- data/lib/zomg/idl/nodes/constant.rb +15 -0
- data/lib/zomg/idl/nodes/interface.rb +13 -0
- data/lib/zomg/idl/nodes/interface_header.rb +14 -0
- data/lib/zomg/idl/nodes/member.rb +14 -0
- data/lib/zomg/idl/nodes/node.rb +52 -0
- data/lib/zomg/idl/nodes/operation.rb +17 -0
- data/lib/zomg/idl/nodes/parameter.rb +18 -0
- data/lib/zomg/idl/nodes/typedef.rb +13 -0
- data/lib/zomg/idl/nodes/union.rb +14 -0
- data/lib/zomg/idl/parser.rb +54 -0
- data/lib/zomg/idl/scanner.rb +367 -0
- data/lib/zomg/idl/visitable.rb +15 -0
- data/lib/zomg/idl/visitors/duhr.rb +24 -0
- data/lib/zomg/idl/visitors/ruby_sexp.rb +173 -0
- data/lib/zomg/idl/visitors/sexp.rb +274 -0
- data/lib/zomg/version.rb +3 -0
- data/test/assets/array/array1.idl +60 -0
- data/test/assets/array/array2.idl +38 -0
- data/test/assets/array/array3.idl +8 -0
- data/test/assets/array/array4.idl +7 -0
- data/test/assets/array/array5.idl +80 -0
- data/test/assets/attribute/grid_0attribs_2methods.idl +16 -0
- data/test/assets/attribute/grid_1ROattribs_1attribs_0methods.idl +19 -0
- data/test/assets/attribute/grid_1ROattribs_1attribs_1methods.idl +19 -0
- data/test/assets/attribute/grid_1ROattribs_1attribs_2methods.idl +17 -0
- data/test/assets/attribute/grid_1ROattribs_1methods.idl +16 -0
- data/test/assets/attribute/grid_1ROattribs_2methods.idl +16 -0
- data/test/assets/attribute/grid_1attribs_1methods.idl +17 -0
- data/test/assets/attribute/grid_1attribs_2methods.idl +17 -0
- data/test/assets/attribute/grid_2ROattribs_0methods.idl +16 -0
- data/test/assets/attribute/grid_2ROattribs_1methods.idl +16 -0
- data/test/assets/attribute/grid_2ROattribs_2methods.idl +16 -0
- data/test/assets/attribute/grid_2attribs_0methods.idl +19 -0
- data/test/assets/attribute/grid_2attribs_1methods.idl +19 -0
- data/test/assets/attribute/grid_2attribs_2methods.idl +19 -0
- data/test/assets/comment/c_style_comments.idl +63 -0
- data/test/assets/comment/comment1.idl +57 -0
- data/test/assets/comment/cpp_style_comments.idl +168 -0
- data/test/assets/comment/shortform.idl +0 -0
- data/test/assets/complex/TestCodeSets.idl +10 -0
- data/test/assets/complex/TestIntfContext.idl +13 -0
- data/test/assets/complex/TestIntfLongLong.idl +51 -0
- data/test/assets/complex/TestIntfWChar.idl +52 -0
- data/test/assets/complex/any1.idl +22 -0
- data/test/assets/complex/complex1.idl +495 -0
- data/test/assets/complex/complex2.idl +730 -0
- data/test/assets/complex/complex3.idl +181 -0
- data/test/assets/complex/complex4.idl +181 -0
- data/test/assets/complex/interop_wchar.idl +60 -0
- data/test/assets/constant/constant1.idl +37 -0
- data/test/assets/constant/constant2.idl +29 -0
- data/test/assets/constant/constant3.idl +50 -0
- data/test/assets/constant/constant4.idl +21 -0
- data/test/assets/constant/constant5.idl +65 -0
- data/test/assets/constant/constant6.idl +144 -0
- data/test/assets/constant/constant7.idl +30 -0
- data/test/assets/enum/enum1.idl +13 -0
- data/test/assets/exception/TestIntfExceptions.idl +69 -0
- data/test/assets/exception/TestIntfExceptionsExt_2_0.idl +34 -0
- data/test/assets/exception/TestIntfExceptionsExt_2_3.idl +24 -0
- data/test/assets/exception/ex1.idl +6 -0
- data/test/assets/exception/ex2.idl +18 -0
- data/test/assets/exception/ex3.idl +10 -0
- data/test/assets/exception/ex4.idl +20 -0
- data/test/assets/exception/sc.idl +0 -0
- data/test/assets/exception/simple1.idl +18 -0
- data/test/assets/exception/simple2.idl +25 -0
- data/test/assets/factory/factory1.idl +77 -0
- data/test/assets/factory/objref.idl +25 -0
- data/test/assets/forward/forward.idl +15 -0
- data/test/assets/forward/forward1.idl +13 -0
- data/test/assets/forward/fwd_incl1.idl +6 -0
- data/test/assets/forward/fwd_incl2.idl +7 -0
- data/test/assets/include/a.idl +23 -0
- data/test/assets/include/b.idl +16 -0
- data/test/assets/include/employee.idl +12 -0
- data/test/assets/include/include1.idl +10 -0
- data/test/assets/include/include2.idl +5 -0
- data/test/assets/include/manager.idl +10 -0
- data/test/assets/include/pragma.idl +41 -0
- data/test/assets/include/rookie.idl +13 -0
- data/test/assets/include/rookiemanager.idl +15 -0
- data/test/assets/include/sample.idl +58 -0
- data/test/assets/include/sample_incl.idl +406 -0
- data/test/assets/inherit/IDL1.idl +18 -0
- data/test/assets/inherit/IDL2.idl +18 -0
- data/test/assets/inherit/IDL3.idl +18 -0
- data/test/assets/inherit/IDL4.idl +17 -0
- data/test/assets/inherit/diamond_inheritance.idl +31 -0
- data/test/assets/inherit/inherit.idl +27 -0
- data/test/assets/limit/longidentifiers.idl +25 -0
- data/test/assets/limit/namelens.idl +26 -0
- data/test/assets/limit/tpztest.idl +21 -0
- data/test/assets/module/module1.idl +29 -0
- data/test/assets/module/module2.idl +34 -0
- data/test/assets/module/module3.idl +20 -0
- data/test/assets/module/module4.idl +15 -0
- data/test/assets/nested/nested1.idl +5 -0
- data/test/assets/nested/nested2.idl +11 -0
- data/test/assets/operations/Benchmark.idl +331 -0
- data/test/assets/operations/CCS.idl +82 -0
- data/test/assets/operations/TestIntf.idl +40 -0
- data/test/assets/operations/TestIntfBasic.idl +653 -0
- data/test/assets/operations/atomic.idl +40 -0
- data/test/assets/operations/dif2.idl +48 -0
- data/test/assets/operations/interface1.idl +16 -0
- data/test/assets/operations/parameters.idl +111 -0
- data/test/assets/operations/perf.idl +84 -0
- data/test/assets/operations/timer.idl +104 -0
- data/test/assets/preprocess/base_for_diamond_inheritance_with_macros.idl +17 -0
- data/test/assets/preprocess/basic_macro_marshalling.idl +54 -0
- data/test/assets/preprocess/diamond_inheritance_with_macros.idl +74 -0
- data/test/assets/preprocess/macro1.idl +52 -0
- data/test/assets/preprocess/preprocess1.idl +246 -0
- data/test/assets/preprocess/preprocess2.idl +3 -0
- data/test/assets/recursion/loop.idl +28 -0
- data/test/assets/recursion/recursion1.idl +47 -0
- data/test/assets/recursion/recursion2.idl +74 -0
- data/test/assets/scenarios/filestat.idl +69 -0
- data/test/assets/scenarios/gateway.idl +176 -0
- data/test/assets/scenarios/library.idl +20 -0
- data/test/assets/scenarios/phone.idl +24 -0
- data/test/assets/scenarios/ticketservice.idl +118 -0
- data/test/assets/scope/scope01.idl +58 -0
- data/test/assets/scope/scope02.idl +25 -0
- data/test/assets/scope/scope03.idl +22 -0
- data/test/assets/scope/scope04.idl +27 -0
- data/test/assets/scope/scope05.idl +30 -0
- data/test/assets/scope/scope06.idl +51 -0
- data/test/assets/scope/scope07.idl +20 -0
- data/test/assets/scope/scope08.idl +88 -0
- data/test/assets/scope/scope09.idl +21 -0
- data/test/assets/scope/scope10.idl +95 -0
- data/test/assets/scope/scope11.idl +62 -0
- data/test/assets/scope/scope12.idl +117 -0
- data/test/assets/scope/scope13.idl +117 -0
- data/test/assets/scope/scope14.idl +117 -0
- data/test/assets/scope/scope15.idl +117 -0
- data/test/assets/scope/scope16.idl +117 -0
- data/test/assets/scope/scope17.idl +117 -0
- data/test/assets/scope/scope18.idl +117 -0
- data/test/assets/scope/scope19.idl +117 -0
- data/test/assets/scope/scope20.idl +215 -0
- data/test/assets/scope/scope21.idl +215 -0
- data/test/assets/scope/scope22.idl +205 -0
- data/test/assets/scope/scope23.idl +261 -0
- data/test/assets/scope/scope24.idl +376 -0
- data/test/assets/scope/scope25.idl +266 -0
- data/test/assets/scope/scope26.idl +180 -0
- data/test/assets/scope/scope27.idl +184 -0
- data/test/assets/scope/scope28.idl +182 -0
- data/test/assets/scope/scope29.idl +182 -0
- data/test/assets/scope/scope30.idl +40 -0
- data/test/assets/scope/scope31.idl +33 -0
- data/test/assets/scope/scope32.idl +37 -0
- data/test/assets/scope/scope33.idl +50 -0
- data/test/assets/scope/scope34.idl +97 -0
- data/test/assets/scope/scope35.idl +72 -0
- data/test/assets/scope/scope36.idl +167 -0
- data/test/assets/scope/scope37.idl +57 -0
- data/test/assets/scope/scope38.idl +38 -0
- data/test/assets/scope/scope39.idl +38 -0
- data/test/assets/scope/scope40.idl +38 -0
- data/test/assets/scope/scope41.idl +24 -0
- data/test/assets/scope/scope42.idl +64 -0
- data/test/assets/scope/scope43.idl +66 -0
- data/test/assets/scope/scope44.idl +52 -0
- data/test/assets/sequence/sequence1.idl +24 -0
- data/test/assets/sequence/sequence2.idl +9 -0
- data/test/assets/simple/basictypes1.idl +80 -0
- data/test/assets/simple/basictypes2.idl +197 -0
- data/test/assets/simple/basictypes3.idl +23 -0
- data/test/assets/simple/basictypes4.idl +73 -0
- data/test/assets/simple/basictypes5.idl +29 -0
- data/test/assets/simple/basictypes6.idl +63 -0
- data/test/assets/simple/simple1.idl +45 -0
- data/test/assets/simple/simple2.idl +61 -0
- data/test/assets/simple/simple3.idl +36 -0
- data/test/assets/string/string1.idl +11 -0
- data/test/assets/string/string2.idl +29 -0
- data/test/assets/struct/struct1.idl +20 -0
- data/test/assets/struct/struct2.idl +21 -0
- data/test/assets/struct/struct3.idl +42 -0
- data/test/assets/struct/struct4.idl +57 -0
- data/test/assets/struct/struct5.idl +71 -0
- data/test/assets/typecode/orb.idl +0 -0
- data/test/assets/typecode/pseudo.idl +25 -0
- data/test/assets/typedef/shorthand_typedef_struct_insideIF.idl +17 -0
- data/test/assets/typedef/shorthand_typedef_struct_insideIF_noMO.idl +16 -0
- data/test/assets/typedef/shorthand_typedef_struct_insideMO.idl +17 -0
- data/test/assets/typedef/shorthand_typedef_struct_outsideMO.idl +17 -0
- data/test/assets/typedef/typedef1.idl +8 -0
- data/test/assets/typedef/typedef2.idl +22 -0
- data/test/assets/typedef/typedef_struct_insideIF.idl +18 -0
- data/test/assets/typedef/typedef_struct_insideMO.idl +18 -0
- data/test/assets/typedef/typedef_struct_outsideMO.idl +18 -0
- data/test/assets/union/union1.idl +31 -0
- data/test/assets/union/union2.idl +22 -0
- data/test/assets/union/union3.idl +26 -0
- data/test/conversions/test_attribute.rb +30 -0
- data/test/conversions/test_enum.rb +25 -0
- data/test/conversions/test_exception.rb +24 -0
- data/test/conversions/test_forward_declaration.rb +22 -0
- data/test/conversions/test_interface.rb +30 -0
- data/test/conversions/test_module.rb +24 -0
- data/test/conversions/test_struct.rb +25 -0
- data/test/conversions/test_typedef.rb +22 -0
- data/test/conversions/test_union.rb +27 -0
- data/test/conversions/test_value_box_dcl.rb +22 -0
- data/test/helper.rb +23 -0
- data/test/simple/test_basictypes1.rb +87 -0
- data/test/simple/test_basictypes2.rb +18 -0
- data/test/simple/test_basictypes3.rb +32 -0
- data/test/simple/test_basictypes4.rb +25 -0
- data/test/simple/test_basictypes5.rb +17 -0
- data/test/simple/test_basictypes6.rb +19 -0
- data/test/simple/test_simple1.rb +40 -0
- data/test/simple/test_simple2.rb +48 -0
- data/test/simple/test_simple3.rb +20 -0
- data/test/test_array.rb +22 -0
- data/test/test_assets.rb +33 -0
- data/test/test_complex.rb +17 -0
- data/test/test_node.rb +15 -0
- data/test/test_parser.rb +17 -0
- data/test/test_scanner.rb +234 -0
- metadata +336 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module ZOMG
|
|
2
|
+
module IDL
|
|
3
|
+
module Visitable
|
|
4
|
+
# Based off the visitor pattern from RubyGarden
|
|
5
|
+
def accept(visitor, &block)
|
|
6
|
+
klass = self.class
|
|
7
|
+
method_name = :"visit_#{klass.name.split(/::/).last}"
|
|
8
|
+
unless visitor.respond_to?(method_name)
|
|
9
|
+
raise "No visitor for #{self.class}"
|
|
10
|
+
end
|
|
11
|
+
visitor.send(method_name, self, &block)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module ZOMG
|
|
2
|
+
module IDL
|
|
3
|
+
module Visitors
|
|
4
|
+
# Stupid path navigation
|
|
5
|
+
class Duhr
|
|
6
|
+
attr_accessor :tree
|
|
7
|
+
def initialize(tree)
|
|
8
|
+
@tree = tree
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def to_sexp; @tree.to_sexp; end
|
|
12
|
+
|
|
13
|
+
def [](i)
|
|
14
|
+
Duhr.new(@tree[i])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def method_missing(sym, *args)
|
|
18
|
+
klass = ZOMG::IDL::Nodes.const_get(sym)
|
|
19
|
+
Duhr.new(tree.children.find_all { |child| child.is_a?(klass) })
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
module ZOMG
|
|
2
|
+
module IDL
|
|
3
|
+
module Visitors
|
|
4
|
+
class RubySexp
|
|
5
|
+
def visit_Specification(o)
|
|
6
|
+
[:block] + o.children.map { |c| c.accept(self) }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def visit_Module(o)
|
|
10
|
+
[ :module,
|
|
11
|
+
classify(o.name),
|
|
12
|
+
[:scope, [:block] + o.children.map { |c| c.accept(self) }]
|
|
13
|
+
]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def visit_Interface(o)
|
|
17
|
+
header = o.header.accept(self)
|
|
18
|
+
header = header ? [:block, header] : [:block]
|
|
19
|
+
[ :module,
|
|
20
|
+
classify(o.header.name),
|
|
21
|
+
[:scope,
|
|
22
|
+
header +
|
|
23
|
+
o.children.map { |c| c.accept(self) }
|
|
24
|
+
]
|
|
25
|
+
]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def visit_InterfaceHeader(o)
|
|
29
|
+
if o.children.length > 0
|
|
30
|
+
[:fcall, :include,
|
|
31
|
+
[:array] + o.children.map { |c|
|
|
32
|
+
[:const, classify(c.accept(self))]
|
|
33
|
+
} ]
|
|
34
|
+
else
|
|
35
|
+
nil
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def visit_Exception(o)
|
|
40
|
+
attributes = o.children.length > 0 ?
|
|
41
|
+
[:scope, [:fcall,
|
|
42
|
+
:attr_accessor,
|
|
43
|
+
[:array] +
|
|
44
|
+
o.children.map { |c|
|
|
45
|
+
c.accept(self)
|
|
46
|
+
}.flatten.map { |att| [:lit, att] }
|
|
47
|
+
]] : [:scope]
|
|
48
|
+
|
|
49
|
+
[:class, classify(o.name), [:const, :Exception], attributes]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def visit_Attribute(o)
|
|
53
|
+
[:fcall,
|
|
54
|
+
o.readonly ? :attr_reader : :attr_accessor,
|
|
55
|
+
[:array] +
|
|
56
|
+
o.children.map { |c| [:lit, c.accept(self)] }
|
|
57
|
+
]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def visit_ScopedName(o)
|
|
61
|
+
o.name.to_sym
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def visit_Operation(o)
|
|
65
|
+
[ :defn,
|
|
66
|
+
o.name.to_sym,
|
|
67
|
+
[:scope,
|
|
68
|
+
[:block,
|
|
69
|
+
[:args] + o.children.map { |c| paramify(c.accept(self)) },
|
|
70
|
+
[:fcall, :raise, [:array,
|
|
71
|
+
[:call, [:const, :NotImplementedError], :new]]
|
|
72
|
+
]
|
|
73
|
+
]
|
|
74
|
+
]
|
|
75
|
+
]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def visit_Parameter(o)
|
|
79
|
+
o.declarator.accept(self)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def visit_Constant(o)
|
|
83
|
+
[:cdecl, o.name.upcase.to_sym, o.value.accept(self)]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def visit_Enum(o)
|
|
87
|
+
[ :cdecl,
|
|
88
|
+
o.name.to_sym,
|
|
89
|
+
[:hash] + o.children.inject([]) { |m,c|
|
|
90
|
+
m += [[:lit, c.to_sym], [:lit, c.to_sym]]
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def visit_IntegerLiteral(o)
|
|
96
|
+
[:lit, o.to_i]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def visit_ValueBoxDcl(o)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def visit_Struct(o)
|
|
103
|
+
[ :cdecl,
|
|
104
|
+
classify(o.name),
|
|
105
|
+
[ :call, [:const, :Struct],
|
|
106
|
+
:new,
|
|
107
|
+
[:array] + o.children.map { |c|
|
|
108
|
+
c.accept(self)
|
|
109
|
+
}.flatten.map { |lit| [:lit, lit] }
|
|
110
|
+
]
|
|
111
|
+
]
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def visit_Union(o)
|
|
115
|
+
[ :cdecl,
|
|
116
|
+
o.name.to_sym,
|
|
117
|
+
[ :call, [:const, :Struct],
|
|
118
|
+
:new,
|
|
119
|
+
[:array] + o.children.map { |c|
|
|
120
|
+
val = c.accept(self)
|
|
121
|
+
val && [:lit, val]
|
|
122
|
+
}.compact
|
|
123
|
+
]
|
|
124
|
+
]
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def visit_CaseLabel(o)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def visit_Case(o)
|
|
131
|
+
o.children.last.accept(self)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def visit_ElementSpec(o)
|
|
135
|
+
o.children[1].accept(self)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def visit_Member(o)
|
|
139
|
+
o.children.map { |c| c.accept(self) }
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def visit_SimpleDeclarator(o)
|
|
143
|
+
o.name.to_sym
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def visit_ArrayDeclarator(o)
|
|
147
|
+
o.name.to_sym
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def visit_Typedef(o)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def visit_ForwardDeclaration(o)
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def accept(target)
|
|
157
|
+
target.accept(self)
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
private
|
|
161
|
+
def classify(string)
|
|
162
|
+
s = string.to_s
|
|
163
|
+
:"#{s.slice(0,1).upcase}#{s[1..-1]}"
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def paramify(string)
|
|
167
|
+
s = string.to_s
|
|
168
|
+
:"#{s.slice(0,1).downcase}#{s[1..-1]}"
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
module ZOMG
|
|
2
|
+
module IDL
|
|
3
|
+
module Visitors
|
|
4
|
+
class Sexp
|
|
5
|
+
def visit_Specification(o)
|
|
6
|
+
[:spec, o.children.map { |c| c.accept(self) }]
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def visit_Struct(o)
|
|
10
|
+
[:struct, o.name, o.children.map { |c| c.accept(self) }]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def visit_Member(o)
|
|
14
|
+
[:member, o.type.accept(self), o.children.map { |c| c.accept(self) }]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def visit_Enum(o)
|
|
18
|
+
[:enum, o.name, o.children]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def visit_Union(o)
|
|
22
|
+
[:union, o.name, o.switch_type.accept(self), o.children.map { |c| c.accept(self) }]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def visit_Case(o)
|
|
26
|
+
[:case, o.children.map { |c| c.accept(self) }]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def visit_CaseLabel(o)
|
|
30
|
+
[:label, o.children.accept(self)]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def visit_ElementSpec(o)
|
|
34
|
+
[:element_spec, o.children.map { |c| c.accept(self) }]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def visit_Typedef(o)
|
|
38
|
+
[ :typedef,
|
|
39
|
+
o.type_spec.accept(self),
|
|
40
|
+
o.children.map { |c| c.accept(self) }
|
|
41
|
+
]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def visit_ArrayDeclarator(o)
|
|
45
|
+
[:array_decl, o.name, o.children.map { |c| c.accept(self) }]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def visit_Sequence(o)
|
|
49
|
+
[:sequence, o.children.map { |c| c.accept(self) }]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def visit_Constant(o)
|
|
53
|
+
[ :const,
|
|
54
|
+
o.type.accept(self),
|
|
55
|
+
o.name,
|
|
56
|
+
o.value.accept(self) ]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def visit_Interface(o)
|
|
60
|
+
[ :interface,
|
|
61
|
+
o.header.accept(self),
|
|
62
|
+
o.children.map { |c| c.accept(self) }
|
|
63
|
+
]
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def visit_Operation(o)
|
|
67
|
+
[:op,
|
|
68
|
+
o.attribute && :oneway,
|
|
69
|
+
o.returns.accept(self),
|
|
70
|
+
o.name,
|
|
71
|
+
o.children.map { |c| c.accept(self) },
|
|
72
|
+
o.raises && o.raises.map { |c| c.accept(self) },
|
|
73
|
+
o.context && o.context.accept(self)
|
|
74
|
+
]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def visit_Parameter(o)
|
|
78
|
+
[ :param,
|
|
79
|
+
o.attribute.accept(self),
|
|
80
|
+
o.type.accept(self),
|
|
81
|
+
o.declarator.accept(self),
|
|
82
|
+
]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def visit_ScopedName(o)
|
|
86
|
+
[ :scoped_name,
|
|
87
|
+
o.name,
|
|
88
|
+
o.children.map { |c| c.accept(self) }
|
|
89
|
+
]
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def visit_Attribute(o)
|
|
93
|
+
[ :attribute,
|
|
94
|
+
o.readonly && :readonly,
|
|
95
|
+
o.type.accept(self),
|
|
96
|
+
o.children.map { |c| c.accept(self) }
|
|
97
|
+
]
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def visit_Module(o)
|
|
101
|
+
[:module, o.name, o.children.map { |c| c.accept(self) }]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def visit_Exception(o)
|
|
105
|
+
[:exception, o.name, o.children.map { |c| c.accept(self) }]
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def visit_Context(o)
|
|
109
|
+
[:context, o.children.map { |c| c.accept(self) }]
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def visit_ValueBoxDcl(o)
|
|
113
|
+
[:valuebox, o.name, o.children.accept(self)]
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def visit_UnaryMinus(o)
|
|
117
|
+
[:uminus, o.children.accept(self)]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def visit_UnaryPlus(o)
|
|
121
|
+
[:uplus, o.children.accept(self)]
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
{
|
|
125
|
+
'MultiplyExpr' => :multiply,
|
|
126
|
+
'ModulusExpr' => :modulus,
|
|
127
|
+
'PlusExpr' => :plus,
|
|
128
|
+
'ShiftLeftExpr' => :lshift,
|
|
129
|
+
'MinusExpr' => :minus,
|
|
130
|
+
'DivideExpr' => :divide,
|
|
131
|
+
'AmpersandExpr' => :ampersand,
|
|
132
|
+
'OrExpr' => :or,
|
|
133
|
+
}.each do |type,sym|
|
|
134
|
+
define_method(:"visit_#{type}") do |o|
|
|
135
|
+
[sym, o.left.accept(self), o.right.accept(self)]
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Terminal nodes
|
|
140
|
+
def visit_Object(o)
|
|
141
|
+
:object
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def visit_WideStringLiteral(o)
|
|
145
|
+
[:wstring_lit, o.children]
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def visit_WideCharacterLiteral(o)
|
|
149
|
+
[:wstring_lit, o.children]
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def visit_StringLiteral(o)
|
|
153
|
+
[:string_lit, o.children]
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def visit_ForwardDeclaration(o)
|
|
157
|
+
[:forward_decl, o.children]
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def visit_FloatingPointLiteral(o)
|
|
161
|
+
[:float, o.children]
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def visit_BooleanLiteral(o)
|
|
165
|
+
[:boolean, o.children]
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def visit_In(o)
|
|
169
|
+
:in
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def visit_Out(o)
|
|
173
|
+
:out
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def visit_Any(o)
|
|
177
|
+
:any
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def visit_InOut(o)
|
|
181
|
+
:in_out
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def visit_InterfaceHeader(o)
|
|
185
|
+
[:header, o.abstract, o.name, o.children.map { |c| c.accept(self) }]
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def visit_DefaultLabel(o)
|
|
189
|
+
[:default]
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def visit_ArraySize(o)
|
|
193
|
+
[:size, o.children.accept(self)]
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def visit_Char(o)
|
|
197
|
+
:char
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def visit_WChar(o)
|
|
201
|
+
:wchar
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def visit_String(o)
|
|
205
|
+
[:string, o.children.map { |c| c.accept(self)}]
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def visit_WString(o)
|
|
209
|
+
[:wstring, o.children.map { |c| c.accept(self)}]
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def visit_Short(o)
|
|
213
|
+
:short
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def visit_Long(o)
|
|
217
|
+
:long
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
def visit_LongLong(o)
|
|
221
|
+
:long_long
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def visit_UnsignedLongLong(o)
|
|
225
|
+
:ulong_long
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def visit_Float(o)
|
|
229
|
+
:float
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def visit_UnsignedShort(o)
|
|
233
|
+
:ushort
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def visit_UnsignedLong(o)
|
|
237
|
+
:ulong
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def visit_Double(o)
|
|
241
|
+
:double
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
def visit_Boolean(o)
|
|
245
|
+
:boolean
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
def visit_Void(o)
|
|
249
|
+
:void
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def visit_Octet(o)
|
|
253
|
+
:octet
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
def visit_SimpleDeclarator(o)
|
|
257
|
+
[:decl, o.name]
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def visit_IntegerLiteral(o)
|
|
261
|
+
[:int, o.to_i]
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
def visit_CharacterLiteral(o)
|
|
265
|
+
[:charlit, o.children]
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def accept(target)
|
|
269
|
+
target.accept(self)
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
end
|