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.
Files changed (238) hide show
  1. data/History.txt +6 -0
  2. data/Manifest.txt +237 -0
  3. data/README.txt +59 -0
  4. data/Rakefile +34 -0
  5. data/bin/omfg +56 -0
  6. data/lib/scanner.rex +169 -0
  7. data/lib/yacc.y +861 -0
  8. data/lib/zomg.rb +22 -0
  9. data/lib/zomg/idl.rb +14 -0
  10. data/lib/zomg/idl/lexer.rb +2151 -0
  11. data/lib/zomg/idl/nodes/attribute.rb +15 -0
  12. data/lib/zomg/idl/nodes/binary.rb +19 -0
  13. data/lib/zomg/idl/nodes/constant.rb +15 -0
  14. data/lib/zomg/idl/nodes/interface.rb +13 -0
  15. data/lib/zomg/idl/nodes/interface_header.rb +14 -0
  16. data/lib/zomg/idl/nodes/member.rb +14 -0
  17. data/lib/zomg/idl/nodes/node.rb +52 -0
  18. data/lib/zomg/idl/nodes/operation.rb +17 -0
  19. data/lib/zomg/idl/nodes/parameter.rb +18 -0
  20. data/lib/zomg/idl/nodes/typedef.rb +13 -0
  21. data/lib/zomg/idl/nodes/union.rb +14 -0
  22. data/lib/zomg/idl/parser.rb +54 -0
  23. data/lib/zomg/idl/scanner.rb +367 -0
  24. data/lib/zomg/idl/visitable.rb +15 -0
  25. data/lib/zomg/idl/visitors/duhr.rb +24 -0
  26. data/lib/zomg/idl/visitors/ruby_sexp.rb +173 -0
  27. data/lib/zomg/idl/visitors/sexp.rb +274 -0
  28. data/lib/zomg/version.rb +3 -0
  29. data/test/assets/array/array1.idl +60 -0
  30. data/test/assets/array/array2.idl +38 -0
  31. data/test/assets/array/array3.idl +8 -0
  32. data/test/assets/array/array4.idl +7 -0
  33. data/test/assets/array/array5.idl +80 -0
  34. data/test/assets/attribute/grid_0attribs_2methods.idl +16 -0
  35. data/test/assets/attribute/grid_1ROattribs_1attribs_0methods.idl +19 -0
  36. data/test/assets/attribute/grid_1ROattribs_1attribs_1methods.idl +19 -0
  37. data/test/assets/attribute/grid_1ROattribs_1attribs_2methods.idl +17 -0
  38. data/test/assets/attribute/grid_1ROattribs_1methods.idl +16 -0
  39. data/test/assets/attribute/grid_1ROattribs_2methods.idl +16 -0
  40. data/test/assets/attribute/grid_1attribs_1methods.idl +17 -0
  41. data/test/assets/attribute/grid_1attribs_2methods.idl +17 -0
  42. data/test/assets/attribute/grid_2ROattribs_0methods.idl +16 -0
  43. data/test/assets/attribute/grid_2ROattribs_1methods.idl +16 -0
  44. data/test/assets/attribute/grid_2ROattribs_2methods.idl +16 -0
  45. data/test/assets/attribute/grid_2attribs_0methods.idl +19 -0
  46. data/test/assets/attribute/grid_2attribs_1methods.idl +19 -0
  47. data/test/assets/attribute/grid_2attribs_2methods.idl +19 -0
  48. data/test/assets/comment/c_style_comments.idl +63 -0
  49. data/test/assets/comment/comment1.idl +57 -0
  50. data/test/assets/comment/cpp_style_comments.idl +168 -0
  51. data/test/assets/comment/shortform.idl +0 -0
  52. data/test/assets/complex/TestCodeSets.idl +10 -0
  53. data/test/assets/complex/TestIntfContext.idl +13 -0
  54. data/test/assets/complex/TestIntfLongLong.idl +51 -0
  55. data/test/assets/complex/TestIntfWChar.idl +52 -0
  56. data/test/assets/complex/any1.idl +22 -0
  57. data/test/assets/complex/complex1.idl +495 -0
  58. data/test/assets/complex/complex2.idl +730 -0
  59. data/test/assets/complex/complex3.idl +181 -0
  60. data/test/assets/complex/complex4.idl +181 -0
  61. data/test/assets/complex/interop_wchar.idl +60 -0
  62. data/test/assets/constant/constant1.idl +37 -0
  63. data/test/assets/constant/constant2.idl +29 -0
  64. data/test/assets/constant/constant3.idl +50 -0
  65. data/test/assets/constant/constant4.idl +21 -0
  66. data/test/assets/constant/constant5.idl +65 -0
  67. data/test/assets/constant/constant6.idl +144 -0
  68. data/test/assets/constant/constant7.idl +30 -0
  69. data/test/assets/enum/enum1.idl +13 -0
  70. data/test/assets/exception/TestIntfExceptions.idl +69 -0
  71. data/test/assets/exception/TestIntfExceptionsExt_2_0.idl +34 -0
  72. data/test/assets/exception/TestIntfExceptionsExt_2_3.idl +24 -0
  73. data/test/assets/exception/ex1.idl +6 -0
  74. data/test/assets/exception/ex2.idl +18 -0
  75. data/test/assets/exception/ex3.idl +10 -0
  76. data/test/assets/exception/ex4.idl +20 -0
  77. data/test/assets/exception/sc.idl +0 -0
  78. data/test/assets/exception/simple1.idl +18 -0
  79. data/test/assets/exception/simple2.idl +25 -0
  80. data/test/assets/factory/factory1.idl +77 -0
  81. data/test/assets/factory/objref.idl +25 -0
  82. data/test/assets/forward/forward.idl +15 -0
  83. data/test/assets/forward/forward1.idl +13 -0
  84. data/test/assets/forward/fwd_incl1.idl +6 -0
  85. data/test/assets/forward/fwd_incl2.idl +7 -0
  86. data/test/assets/include/a.idl +23 -0
  87. data/test/assets/include/b.idl +16 -0
  88. data/test/assets/include/employee.idl +12 -0
  89. data/test/assets/include/include1.idl +10 -0
  90. data/test/assets/include/include2.idl +5 -0
  91. data/test/assets/include/manager.idl +10 -0
  92. data/test/assets/include/pragma.idl +41 -0
  93. data/test/assets/include/rookie.idl +13 -0
  94. data/test/assets/include/rookiemanager.idl +15 -0
  95. data/test/assets/include/sample.idl +58 -0
  96. data/test/assets/include/sample_incl.idl +406 -0
  97. data/test/assets/inherit/IDL1.idl +18 -0
  98. data/test/assets/inherit/IDL2.idl +18 -0
  99. data/test/assets/inherit/IDL3.idl +18 -0
  100. data/test/assets/inherit/IDL4.idl +17 -0
  101. data/test/assets/inherit/diamond_inheritance.idl +31 -0
  102. data/test/assets/inherit/inherit.idl +27 -0
  103. data/test/assets/limit/longidentifiers.idl +25 -0
  104. data/test/assets/limit/namelens.idl +26 -0
  105. data/test/assets/limit/tpztest.idl +21 -0
  106. data/test/assets/module/module1.idl +29 -0
  107. data/test/assets/module/module2.idl +34 -0
  108. data/test/assets/module/module3.idl +20 -0
  109. data/test/assets/module/module4.idl +15 -0
  110. data/test/assets/nested/nested1.idl +5 -0
  111. data/test/assets/nested/nested2.idl +11 -0
  112. data/test/assets/operations/Benchmark.idl +331 -0
  113. data/test/assets/operations/CCS.idl +82 -0
  114. data/test/assets/operations/TestIntf.idl +40 -0
  115. data/test/assets/operations/TestIntfBasic.idl +653 -0
  116. data/test/assets/operations/atomic.idl +40 -0
  117. data/test/assets/operations/dif2.idl +48 -0
  118. data/test/assets/operations/interface1.idl +16 -0
  119. data/test/assets/operations/parameters.idl +111 -0
  120. data/test/assets/operations/perf.idl +84 -0
  121. data/test/assets/operations/timer.idl +104 -0
  122. data/test/assets/preprocess/base_for_diamond_inheritance_with_macros.idl +17 -0
  123. data/test/assets/preprocess/basic_macro_marshalling.idl +54 -0
  124. data/test/assets/preprocess/diamond_inheritance_with_macros.idl +74 -0
  125. data/test/assets/preprocess/macro1.idl +52 -0
  126. data/test/assets/preprocess/preprocess1.idl +246 -0
  127. data/test/assets/preprocess/preprocess2.idl +3 -0
  128. data/test/assets/recursion/loop.idl +28 -0
  129. data/test/assets/recursion/recursion1.idl +47 -0
  130. data/test/assets/recursion/recursion2.idl +74 -0
  131. data/test/assets/scenarios/filestat.idl +69 -0
  132. data/test/assets/scenarios/gateway.idl +176 -0
  133. data/test/assets/scenarios/library.idl +20 -0
  134. data/test/assets/scenarios/phone.idl +24 -0
  135. data/test/assets/scenarios/ticketservice.idl +118 -0
  136. data/test/assets/scope/scope01.idl +58 -0
  137. data/test/assets/scope/scope02.idl +25 -0
  138. data/test/assets/scope/scope03.idl +22 -0
  139. data/test/assets/scope/scope04.idl +27 -0
  140. data/test/assets/scope/scope05.idl +30 -0
  141. data/test/assets/scope/scope06.idl +51 -0
  142. data/test/assets/scope/scope07.idl +20 -0
  143. data/test/assets/scope/scope08.idl +88 -0
  144. data/test/assets/scope/scope09.idl +21 -0
  145. data/test/assets/scope/scope10.idl +95 -0
  146. data/test/assets/scope/scope11.idl +62 -0
  147. data/test/assets/scope/scope12.idl +117 -0
  148. data/test/assets/scope/scope13.idl +117 -0
  149. data/test/assets/scope/scope14.idl +117 -0
  150. data/test/assets/scope/scope15.idl +117 -0
  151. data/test/assets/scope/scope16.idl +117 -0
  152. data/test/assets/scope/scope17.idl +117 -0
  153. data/test/assets/scope/scope18.idl +117 -0
  154. data/test/assets/scope/scope19.idl +117 -0
  155. data/test/assets/scope/scope20.idl +215 -0
  156. data/test/assets/scope/scope21.idl +215 -0
  157. data/test/assets/scope/scope22.idl +205 -0
  158. data/test/assets/scope/scope23.idl +261 -0
  159. data/test/assets/scope/scope24.idl +376 -0
  160. data/test/assets/scope/scope25.idl +266 -0
  161. data/test/assets/scope/scope26.idl +180 -0
  162. data/test/assets/scope/scope27.idl +184 -0
  163. data/test/assets/scope/scope28.idl +182 -0
  164. data/test/assets/scope/scope29.idl +182 -0
  165. data/test/assets/scope/scope30.idl +40 -0
  166. data/test/assets/scope/scope31.idl +33 -0
  167. data/test/assets/scope/scope32.idl +37 -0
  168. data/test/assets/scope/scope33.idl +50 -0
  169. data/test/assets/scope/scope34.idl +97 -0
  170. data/test/assets/scope/scope35.idl +72 -0
  171. data/test/assets/scope/scope36.idl +167 -0
  172. data/test/assets/scope/scope37.idl +57 -0
  173. data/test/assets/scope/scope38.idl +38 -0
  174. data/test/assets/scope/scope39.idl +38 -0
  175. data/test/assets/scope/scope40.idl +38 -0
  176. data/test/assets/scope/scope41.idl +24 -0
  177. data/test/assets/scope/scope42.idl +64 -0
  178. data/test/assets/scope/scope43.idl +66 -0
  179. data/test/assets/scope/scope44.idl +52 -0
  180. data/test/assets/sequence/sequence1.idl +24 -0
  181. data/test/assets/sequence/sequence2.idl +9 -0
  182. data/test/assets/simple/basictypes1.idl +80 -0
  183. data/test/assets/simple/basictypes2.idl +197 -0
  184. data/test/assets/simple/basictypes3.idl +23 -0
  185. data/test/assets/simple/basictypes4.idl +73 -0
  186. data/test/assets/simple/basictypes5.idl +29 -0
  187. data/test/assets/simple/basictypes6.idl +63 -0
  188. data/test/assets/simple/simple1.idl +45 -0
  189. data/test/assets/simple/simple2.idl +61 -0
  190. data/test/assets/simple/simple3.idl +36 -0
  191. data/test/assets/string/string1.idl +11 -0
  192. data/test/assets/string/string2.idl +29 -0
  193. data/test/assets/struct/struct1.idl +20 -0
  194. data/test/assets/struct/struct2.idl +21 -0
  195. data/test/assets/struct/struct3.idl +42 -0
  196. data/test/assets/struct/struct4.idl +57 -0
  197. data/test/assets/struct/struct5.idl +71 -0
  198. data/test/assets/typecode/orb.idl +0 -0
  199. data/test/assets/typecode/pseudo.idl +25 -0
  200. data/test/assets/typedef/shorthand_typedef_struct_insideIF.idl +17 -0
  201. data/test/assets/typedef/shorthand_typedef_struct_insideIF_noMO.idl +16 -0
  202. data/test/assets/typedef/shorthand_typedef_struct_insideMO.idl +17 -0
  203. data/test/assets/typedef/shorthand_typedef_struct_outsideMO.idl +17 -0
  204. data/test/assets/typedef/typedef1.idl +8 -0
  205. data/test/assets/typedef/typedef2.idl +22 -0
  206. data/test/assets/typedef/typedef_struct_insideIF.idl +18 -0
  207. data/test/assets/typedef/typedef_struct_insideMO.idl +18 -0
  208. data/test/assets/typedef/typedef_struct_outsideMO.idl +18 -0
  209. data/test/assets/union/union1.idl +31 -0
  210. data/test/assets/union/union2.idl +22 -0
  211. data/test/assets/union/union3.idl +26 -0
  212. data/test/conversions/test_attribute.rb +30 -0
  213. data/test/conversions/test_enum.rb +25 -0
  214. data/test/conversions/test_exception.rb +24 -0
  215. data/test/conversions/test_forward_declaration.rb +22 -0
  216. data/test/conversions/test_interface.rb +30 -0
  217. data/test/conversions/test_module.rb +24 -0
  218. data/test/conversions/test_struct.rb +25 -0
  219. data/test/conversions/test_typedef.rb +22 -0
  220. data/test/conversions/test_union.rb +27 -0
  221. data/test/conversions/test_value_box_dcl.rb +22 -0
  222. data/test/helper.rb +23 -0
  223. data/test/simple/test_basictypes1.rb +87 -0
  224. data/test/simple/test_basictypes2.rb +18 -0
  225. data/test/simple/test_basictypes3.rb +32 -0
  226. data/test/simple/test_basictypes4.rb +25 -0
  227. data/test/simple/test_basictypes5.rb +17 -0
  228. data/test/simple/test_basictypes6.rb +19 -0
  229. data/test/simple/test_simple1.rb +40 -0
  230. data/test/simple/test_simple2.rb +48 -0
  231. data/test/simple/test_simple3.rb +20 -0
  232. data/test/test_array.rb +22 -0
  233. data/test/test_assets.rb +33 -0
  234. data/test/test_complex.rb +17 -0
  235. data/test/test_node.rb +15 -0
  236. data/test/test_parser.rb +17 -0
  237. data/test/test_scanner.rb +234 -0
  238. 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