open_ehr 0.6.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. data/Gemfile +10 -2
  2. data/Gemfile.lock +58 -18
  3. data/Guardfile +2 -1
  4. data/History.txt +10 -3
  5. data/Manifest.txt +3 -5
  6. data/README.rdoc +36 -32
  7. data/Rakefile +1 -1
  8. data/VERSION +1 -1
  9. data/bin/adl_validator.rb +84 -0
  10. data/lib/open_ehr/am/archetype/constraint_model/primitive.rb +11 -7
  11. data/lib/open_ehr/am/archetype/constraint_model.rb +4 -16
  12. data/lib/open_ehr/am/archetype/ontology.rb +37 -6
  13. data/lib/open_ehr/am/archetype.rb +6 -7
  14. data/lib/open_ehr/am/open_ehr_profile/data_types/text.rb +5 -2
  15. data/lib/open_ehr/parser/adl.rb +19 -0
  16. data/lib/open_ehr/parser/adl_grammar.tt +155 -0
  17. data/lib/open_ehr/parser/adl_parser.rb +48 -0
  18. data/lib/open_ehr/parser/cadl_grammar.tt +803 -0
  19. data/lib/open_ehr/parser/dadl.rb +13 -0
  20. data/lib/open_ehr/parser/dadl_grammar.tt +358 -0
  21. data/lib/open_ehr/parser/exception.rb +68 -0
  22. data/lib/open_ehr/parser/scanner/adl_scanner.rb +819 -0
  23. data/lib/open_ehr/parser/shared_token_grammar.tt +1200 -0
  24. data/lib/open_ehr/parser/validator.rb +20 -0
  25. data/lib/open_ehr/parser.rb +16 -12
  26. data/lib/open_ehr.rb +1 -0
  27. data/open_ehr.gemspec +364 -0
  28. data/spec/lib/open_ehr/am/archetype/archetype_spec.rb +7 -2
  29. data/spec/lib/open_ehr/am/archetype/constraint_model/c_multiple_attribute_spec.rb +0 -6
  30. data/spec/lib/open_ehr/am/archetype/constraint_model/c_object_spec.rb +10 -10
  31. data/spec/lib/open_ehr/am/archetype/constraint_model/c_single_attribute_spec.rb +0 -6
  32. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_boolean_spec.rb +5 -0
  33. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_date_time_spec.rb +5 -0
  34. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_duration_spec.rb +5 -0
  35. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_integer_spec.rb +5 -0
  36. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_primitive_spec.rb +8 -6
  37. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_real_spec.rb +7 -2
  38. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_string_spec.rb +5 -0
  39. data/spec/lib/open_ehr/am/archetype/constraint_model/primitive/c_time_spec.rb +5 -0
  40. data/spec/lib/open_ehr/am/archetype/ontology/archetype_ontology_spec.rb +27 -7
  41. data/spec/lib/open_ehr/am/archetype/ontology/archetype_term_spec.rb +3 -3
  42. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.assumed_types.v1.adl +88 -0
  43. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.basic_types.v1.adl +143 -0
  44. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.basic_types_fail.v1.adl +50 -0
  45. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.most_minimal.v1.adl +27 -0
  46. data/spec/lib/open_ehr/parser/adl/adl-test-ENTRY.structure_test1.v1.adl +46 -0
  47. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ACTION.imaging.v1.adl +275 -0
  48. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ACTION.referral.v1.adl +351 -0
  49. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.auscultation-chest.v1.adl +765 -0
  50. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.auscultation.v1.adl +217 -0
  51. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.dimensions-circumference.v1.adl +134 -0
  52. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.dimensions.v1.adl +241 -0
  53. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-abdomen.v1.adl +321 -0
  54. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-chest.v1.adl +379 -0
  55. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-fetus.v1.adl +577 -0
  56. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-generic-joint.v1.adl +146 -0
  57. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-generic-lymphnode.v1.adl +176 -0
  58. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-generic-mass.v1.adl +221 -0
  59. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-generic.v1.adl +139 -0
  60. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-nervous_system.v1.adl +116 -0
  61. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-uterine_cervix.v1.adl +420 -0
  62. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-CLUSTER.exam-uterus.v1.adl +293 -0
  63. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-COMPOSITION.discharge.v1draft.adl +53 -0
  64. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-COMPOSITION.encounter.v1draft.adl +45 -0
  65. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-EVALUATION.adverse.v1.adl +411 -0
  66. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-INSTRUCTION.medication.v1.adl +88 -0
  67. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-INSTRUCTION.referral.v1.adl +84 -0
  68. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.Laboratory_request.v1.adl +492 -0
  69. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.follow_up.v1draft.adl +94 -0
  70. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.imaging.v1.adl +127 -0
  71. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.medication-formulation.v1.adl +457 -0
  72. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.medication.v1.adl +869 -0
  73. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-ITEM_TREE.referral.v1.adl +494 -0
  74. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-OBSERVATION.apgar.v1.adl +545 -0
  75. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-OBSERVATION.blood_pressure.v1.adl +673 -0
  76. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-OBSERVATION.body_mass_index.v1.adl +166 -0
  77. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-SECTION.findings.v1.adl +47 -0
  78. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-SECTION.reason_for_encounter.v1.adl +51 -0
  79. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-SECTION.summary.v1.adl +52 -0
  80. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-SECTION.vital_signs.v1.adl +54 -0
  81. data/spec/lib/open_ehr/parser/adl/openEHR-EHR-cadl_sample.v1.adl +9 -0
  82. data/spec/lib/open_ehr/parser/adl_parser_spec.rb +210 -0
  83. data/spec/lib/open_ehr/parser/base_spec.rb +19 -0
  84. data/spec/spec.opts +2 -1
  85. data/spec/spec_helper.rb +3 -0
  86. metadata +166 -52
  87. data/doc/README_rdoc.html +0 -148
  88. data/doc/created.rid +0 -2
  89. data/doc/images/brick.png +0 -0
  90. data/doc/images/brick_link.png +0 -0
  91. data/doc/images/bug.png +0 -0
  92. data/doc/images/bullet_black.png +0 -0
  93. data/doc/images/bullet_toggle_minus.png +0 -0
  94. data/doc/images/bullet_toggle_plus.png +0 -0
  95. data/doc/images/date.png +0 -0
  96. data/doc/images/find.png +0 -0
  97. data/doc/images/loadingAnimation.gif +0 -0
  98. data/doc/images/macFFBgHack.png +0 -0
  99. data/doc/images/package.png +0 -0
  100. data/doc/images/page_green.png +0 -0
  101. data/doc/images/page_white_text.png +0 -0
  102. data/doc/images/page_white_width.png +0 -0
  103. data/doc/images/plugin.png +0 -0
  104. data/doc/images/ruby.png +0 -0
  105. data/doc/images/tag_green.png +0 -0
  106. data/doc/images/wrench.png +0 -0
  107. data/doc/images/wrench_orange.png +0 -0
  108. data/doc/images/zoom.png +0 -0
  109. data/doc/index.html +0 -54
  110. data/doc/js/darkfish.js +0 -116
  111. data/doc/js/jquery.js +0 -32
  112. data/doc/js/quicksearch.js +0 -114
  113. data/doc/js/thickbox-compressed.js +0 -10
  114. data/doc/rdoc.css +0 -706
  115. data/lib/#open_ehr.rb# +0 -11
@@ -0,0 +1,1200 @@
1
+ require 'open_ehr/assumed_library_types'
2
+
3
+ module OpenEHR
4
+ module Parser
5
+ grammar SharedToken
6
+
7
+ rule any_identifier
8
+ type_identifier '' {
9
+ def value
10
+ type_identifier.value
11
+ end
12
+ }
13
+ / V_ATTRIBUTE_IDENTIFIER '' {
14
+ def value
15
+ V_ATTRIBUTE_IDENTIFIER.value
16
+ end
17
+ }
18
+ end
19
+
20
+ rule type_identifier
21
+ '(' id:V_TYPE_IDENTIFIER ')' {
22
+ def value
23
+ id.value
24
+ end
25
+ }
26
+ / '(' id:V_GENERIC_TYPE_IDENTIFIER ')' {
27
+ def value
28
+ id.value
29
+ end
30
+ }
31
+ / id:V_TYPE_IDENTIFIER '' {
32
+ def value
33
+ id.value
34
+ end
35
+ }
36
+ / id:V_GENERIC_TYPE_IDENTIFIER '' {
37
+ def value
38
+ id.value
39
+ end
40
+ }
41
+ end
42
+
43
+ rule boolean_value
44
+ SYM_TRUE {
45
+ def value
46
+ true
47
+ end
48
+ }
49
+ / SYM_FALSE {
50
+ def value
51
+ false
52
+ end
53
+ }
54
+ end
55
+
56
+ rule boolean_list_value
57
+ boolean_value (',' white_space more_bool:(boolean_value ''))+ {
58
+ def value
59
+ booelans.map {|b| b.value}
60
+ end
61
+
62
+ def booleans
63
+ [boolean_value] + more_bool.elements.map { |b| b.boolean_value }
64
+ end
65
+ }
66
+ / boolean_value white_space SYM_LIST_CONTINUE {
67
+ def value
68
+ [boolean_value.value]
69
+ end
70
+ }
71
+ end
72
+
73
+ rule integer_value
74
+ ('+' / '-')? V_INTEGER {
75
+ def value
76
+ text_value.to_i
77
+ end
78
+ }
79
+ end
80
+
81
+ rule integer_list_value
82
+ integer_value (',' white_space more_i:(integer_value))* {
83
+ def value
84
+ integers.map { |i| i.value }
85
+ end
86
+
87
+ def integers
88
+ [integer_value] + more_i.elements.map { |i| i.integer_value }
89
+ end
90
+ }
91
+ / integer_value ',' white_space SYM_LIST_CONTINUE {
92
+ def value
93
+ [integer_value.value]
94
+ end
95
+ }
96
+ end
97
+
98
+ rule integer_interval_value
99
+ SYM_INTERVAL_DELIM SYM_GT lo:integer_value SYM_ELLIPSIS SYM_LT up:integer_value SYM_INTERVAL_DELIM {
100
+ def value
101
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
102
+ :upper => up.value,
103
+ :lower_included => false,
104
+ :upper_included => false)
105
+ end
106
+ }
107
+ / SYM_INTERVAL_DELIM SYM_GT lo:integer_value SYM_ELLIPSIS up:integer_value SYM_INTERVAL_DELIM {
108
+ def value
109
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
110
+ :upper => up.value,
111
+ :lower_included => false,
112
+ :upper_included => true)
113
+ end
114
+ }
115
+ / SYM_INTERVAL_DELIM lo:integer_value SYM_ELLIPSIS SYM_LT up:integer_value SYM_INTERVAL_DELIM {
116
+ def value
117
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
118
+ :upper => up.value,
119
+ :lower_included => true,
120
+ :upper_included => false)
121
+ end
122
+ }
123
+ / SYM_INTERVAL_DELIM lo:integer_value SYM_ELLIPSIS up:integer_value SYM_INTERVAL_DELIM {
124
+ def value
125
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
126
+ :upper => up.value,
127
+ :lower_included => true,
128
+ :upper_included => true)
129
+ end
130
+ }
131
+ / SYM_INTERVAL_DELIM SYM_LT up:integer_value SYM_INTERVAL_DELIM {
132
+ def value
133
+ OpenEHR::AssumedLibraryTypes::Interval.new(
134
+ :upper => up.value,
135
+ :lower_unbounded => true,
136
+ :upper_included => false)
137
+ end
138
+ }
139
+ / SYM_INTERVAL_DELIM SYM_LE up:integer_value SYM_INTERVAL_DELIM {
140
+ def value
141
+ OpenEHR::AssumedLibraryTypes::Interval.new(
142
+ :upper => up.value,
143
+ :lower_unbounded => true,
144
+ :upper_included => true)
145
+ end
146
+ }
147
+ / SYM_INTERVAL_DELIM SYM_GT lo:integer_value SYM_INTERVAL_DELIM {
148
+ def value
149
+ OpenEHR::AssumedLibraryTypes::Interval.new(
150
+ :lower => lo.value,
151
+ :uppper_unbounded => true,
152
+ :lower_included => false)
153
+ end
154
+ }
155
+ / SYM_INTERVAL_DELIM SYM_GE integer_value SYM_INTERVAL_DELIM {
156
+ def value
157
+ OpenEHR::AssumedLibraryTypes::Interval.new(
158
+ :lower => up.value,
159
+ :upper_unbounded => true,
160
+ :lower_included => true)
161
+ end
162
+ }
163
+ / SYM_INTERVAL_DELIM val:integer_value SYM_INTERVAL_DELIM {
164
+ def value
165
+ OpenEHR::AssumedLibraryTypes::Interval.new(
166
+ :lower => val.value,
167
+ :lower => val.value,
168
+ :upper_included => true,
169
+ :lower_included => true)
170
+ end
171
+ }
172
+ end
173
+
174
+ rule real_value
175
+ ('+' / '-') V_REAL {
176
+ def value
177
+ text_value.to_f
178
+ end
179
+ }
180
+ end
181
+
182
+ rule real_list_value
183
+ real_value (',' white_space more_i:(real_value) '')* {
184
+ def value
185
+ reals.map { |i| i.value }
186
+ end
187
+
188
+ def reals
189
+ [real_value] + more_i.elements.map { |i| i.real_value }
190
+ end
191
+ }
192
+ / real_value ',' white_space SYM_LIST_CONTINUE {
193
+ def value
194
+ [real_value.value]
195
+ end
196
+ }
197
+ end
198
+
199
+ rule real_interval_value
200
+ SYM_INTERVAL_DELIM SYM_GT lo:real_value SYM_ELLIPSIS SYM_LT up:real_value SYM_INTERVAL_DELIM {
201
+ def value
202
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
203
+ :upper => up.value,
204
+ :lower_included => false,
205
+ :upper_included => false)
206
+ end
207
+ }
208
+ / SYM_INTERVAL_DELIM SYM_GT lo:real_value SYM_ELLIPSIS up:real_value SYM_INTERVAL_DELIM {
209
+ def value
210
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
211
+ :upper => up.value,
212
+ :lower_included => false,
213
+ :upper_included => true)
214
+ end
215
+ }
216
+ / SYM_INTERVAL_DELIM lo:real_value SYM_ELLIPSIS SYM_LT up:real_value SYM_INTERVAL_DELIM {
217
+ def value
218
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
219
+ :upper => up.value,
220
+ :lower_included => true,
221
+ :upper_included => false)
222
+ end
223
+ }
224
+ / SYM_INTERVAL_DELIM lo:real_value SYM_ELLIPSIS up:real_value SYM_INTERVAL_DELIM {
225
+ def value
226
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
227
+ :upper => up.value,
228
+ :lower_included => true,
229
+ :upper_included => true)
230
+ end
231
+ }
232
+ / SYM_INTERVAL_DELIM SYM_LT up:real_value SYM_INTERVAL_DELIM {
233
+ def value
234
+ OpenEHR::AssumedLibraryTypes::Interval.new(
235
+ :upper => up.value,
236
+ :lower_unbounded => true,
237
+ :upper_included => false)
238
+ end
239
+ }
240
+ / SYM_INTERVAL_DELIM SYM_LE up:real_value SYM_INTERVAL_DELIM {
241
+ def value
242
+ OpenEHR::AssumedLibraryTypes::Interval.new(
243
+ :upper => up.value,
244
+ :lower_unbounded => true,
245
+ :upper_included => true)
246
+ end
247
+ }
248
+ / SYM_INTERVAL_DELIM SYM_GT lo:real_value SYM_INTERVAL_DELIM {
249
+ def value
250
+ OpenEHR::AssumedLibraryTypes::Interval.new(
251
+ :lower => lo.value,
252
+ :uppper_unbounded => true,
253
+ :lower_included => false)
254
+ end
255
+ }
256
+ / SYM_INTERVAL_DELIM SYM_GE real_value SYM_INTERVAL_DELIM {
257
+ def value
258
+ OpenEHR::AssumedLibraryTypes::Interval.new(
259
+ :lower => up.value,
260
+ :upper_unbounded => true,
261
+ :lower_included => true)
262
+ end
263
+ }
264
+ / SYM_INTERVAL_DELIM val:real_value SYM_INTERVAL_DELIM {
265
+ def value
266
+ OpenEHR::AssumedLibraryTypes::Interval.new(
267
+ :lower => val.value,
268
+ :lower => val.value,
269
+ :upper_included => true,
270
+ :lower_included => true)
271
+ end
272
+ }
273
+ end
274
+
275
+ rule character_value
276
+ V_CHAR '' {
277
+ def value
278
+ text_value
279
+ end
280
+ }
281
+ end
282
+
283
+ rule character_list_value
284
+ character_value (',' white_space more_chars:(character_value))+ {
285
+ def value
286
+ characters.map {|c| c.value }
287
+ end
288
+
289
+ def characters
290
+ [character_value] + more_chars.elements.map {|c| c.character_value}
291
+ end
292
+ }
293
+ / character_value ',' SYM_LIST_CONTINUE {
294
+ def value
295
+ [character_value.value]
296
+ end
297
+ }
298
+ end
299
+
300
+ rule string_value
301
+ str:V_STRING '' {
302
+ def value
303
+ str.value
304
+ end
305
+ }
306
+ end
307
+
308
+ rule string_list_value
309
+ first:string_value second:(',' white_space string_value)+ {
310
+ def value
311
+ strings.map {|s| s.value}
312
+ end
313
+
314
+ def strings
315
+ [first] + second.elements.map {|s| s.string_value}
316
+ end
317
+ }
318
+ / str:V_STRING ',' white_space SYM_LIST_CONTINUE {
319
+ def value
320
+ [str.value]
321
+ end
322
+ }
323
+ end
324
+
325
+ rule date_value
326
+ V_ISO8601_EXTENDED_DATE '' {
327
+ def value
328
+ OpenEHR::AssumedLibraryTypes::ISO8601Date.new(V_ISO8601_EXTENDED_DATE.text_value)
329
+ end
330
+ }
331
+ end
332
+
333
+ rule date_list_value
334
+ date_value more_dates:(',' white_space date_value)+ {
335
+ def value
336
+ dates.map {|d| d.value}
337
+ end
338
+
339
+ def dates
340
+ [date_value] + more_dates.elements.map {|d| d.date_value}
341
+ end
342
+ }
343
+ / date_value ',' SYM_LIST_CONTINUE {
344
+ def value
345
+ [date_value.value]
346
+ end
347
+ }
348
+ end
349
+
350
+ rule date_interval_value
351
+ SYM_INTERVAL_DELIM SYM_GT lo:date_value SYM_ELLIPSIS SYM_LT up:date_value SYM_INTERVAL_DELIM {
352
+ def value
353
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
354
+ :upper => up.value,
355
+ :lower_included => false,
356
+ :upper_included => false)
357
+ end
358
+ }
359
+ / SYM_INTERVAL_DELIM SYM_GT lo:date_value SYM_ELLIPSIS up:date_value SYM_INTERVAL_DELIM {
360
+ def value
361
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
362
+ :upper => up.value,
363
+ :lower_included => false,
364
+ :upper_included => true)
365
+ end
366
+ }
367
+ / SYM_INTERVAL_DELIM lo:date_value SYM_ELLIPSIS SYM_LT up:date_value SYM_INTERVAL_DELIM {
368
+ def value
369
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
370
+ :upper => up.value,
371
+ :lower_included => true,
372
+ :upper_included => false)
373
+ end
374
+ }
375
+ / SYM_INTERVAL_DELIM lo:date_value SYM_ELLIPSIS up:date_value SYM_INTERVAL_DELIM {
376
+ def value
377
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
378
+ :upper => up.value,
379
+ :lower_included => true,
380
+ :upper_included => true)
381
+ end
382
+ }
383
+ / SYM_INTERVAL_DELIM SYM_LT up:date_value SYM_INTERVAL_DELIM {
384
+ def value
385
+ OpenEHR::AssumedLibraryTypes::Interval.new(
386
+ :upper => up.value,
387
+ :lower_unbounded => true,
388
+ :upper_included => false)
389
+ end
390
+ }
391
+ / SYM_INTERVAL_DELIM SYM_LE up:date_value SYM_INTERVAL_DELIM {
392
+ def value
393
+ OpenEHR::AssumedLibraryTypes::Interval.new(
394
+ :upper => up.value,
395
+ :lower_unbounded => true,
396
+ :upper_included => true)
397
+ end
398
+ }
399
+ / SYM_INTERVAL_DELIM SYM_GT lo:date_value SYM_INTERVAL_DELIM {
400
+ def value
401
+ OpenEHR::AssumedLibraryTypes::Interval.new(
402
+ :lower => lo.value,
403
+ :uppper_unbounded => true,
404
+ :lower_included => false)
405
+ end
406
+ }
407
+ / SYM_INTERVAL_DELIM SYM_GE date_value SYM_INTERVAL_DELIM {
408
+ def value
409
+ OpenEHR::AssumedLibraryTypes::Interval.new(
410
+ :lower => up.value,
411
+ :upper_unbounded => true,
412
+ :lower_included => true)
413
+ end
414
+ }
415
+ / SYM_INTERVAL_DELIM val:date_value SYM_INTERVAL_DELIM {
416
+ def value
417
+ OpenEHR::AssumedLibraryTypes::Interval.new(
418
+ :lower => val.value,
419
+ :lower => val.value,
420
+ :upper_included => true,
421
+ :lower_included => true)
422
+ end
423
+ }
424
+ end
425
+
426
+ rule time_value
427
+ V_ISO8601_EXTENDED_TIME '' {
428
+ def value
429
+ OpenEHR::AssumedLibraryTypes::ISO8601Time(V_ISO8601_EXTENDED_TIME.text_value)
430
+ end
431
+ }
432
+ end
433
+
434
+ rule time_list_value
435
+ time_value more_t:(',' time_value)+ {
436
+ def value
437
+ times.map {|t| t.value}
438
+ end
439
+
440
+ def times
441
+ [time_value] + more_t.elements.map {|t| t.time_value}
442
+ end
443
+ }
444
+ / time_value ',' SYM_LIST_CONTINUE {
445
+ def value
446
+ [time_value.value]
447
+ end
448
+ }
449
+ end
450
+
451
+ rule time_interval_value
452
+ SYM_INTERVAL_DELIM SYM_GT lo:time_value SYM_ELLIPSIS SYM_LT up:time_value SYM_INTERVAL_DELIM {
453
+ def value
454
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
455
+ :upper => up.value,
456
+ :lower_included => false,
457
+ :upper_included => false)
458
+ end
459
+ }
460
+ / SYM_INTERVAL_DELIM SYM_GT lo:time_value SYM_ELLIPSIS up:time_value SYM_INTERVAL_DELIM {
461
+ def value
462
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
463
+ :upper => up.value,
464
+ :lower_included => false,
465
+ :upper_included => true)
466
+ end
467
+ }
468
+ / SYM_INTERVAL_DELIM lo:time_value SYM_ELLIPSIS SYM_LT up:time_value SYM_INTERVAL_DELIM {
469
+ def value
470
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
471
+ :upper => up.value,
472
+ :lower_included => true,
473
+ :upper_included => false)
474
+ end
475
+ }
476
+ / SYM_INTERVAL_DELIM lo:time_value SYM_ELLIPSIS up:time_value SYM_INTERVAL_DELIM {
477
+ def value
478
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
479
+ :upper => up.value,
480
+ :lower_included => true,
481
+ :upper_included => true)
482
+ end
483
+ }
484
+ / SYM_INTERVAL_DELIM SYM_LT up:time_value SYM_INTERVAL_DELIM {
485
+ def value
486
+ OpenEHR::AssumedLibraryTypes::Interval.new(
487
+ :upper => up.value,
488
+ :lower_unbounded => true,
489
+ :upper_included => false)
490
+ end
491
+ }
492
+ / SYM_INTERVAL_DELIM SYM_LE up:time_value SYM_INTERVAL_DELIM {
493
+ def value
494
+ OpenEHR::AssumedLibraryTypes::Interval.new(
495
+ :upper => up.value,
496
+ :lower_unbounded => true,
497
+ :upper_included => true)
498
+ end
499
+ }
500
+ / SYM_INTERVAL_DELIM SYM_GT lo:time_value SYM_INTERVAL_DELIM {
501
+ def value
502
+ OpenEHR::AssumedLibraryTypes::Interval.new(
503
+ :lower => lo.value,
504
+ :uppper_unbounded => true,
505
+ :lower_included => false)
506
+ end
507
+ }
508
+ / SYM_INTERVAL_DELIM SYM_GE time_value SYM_INTERVAL_DELIM {
509
+ def value
510
+ OpenEHR::AssumedLibraryTypes::Interval.new(
511
+ :lower => up.value,
512
+ :upper_unbounded => true,
513
+ :lower_included => true)
514
+ end
515
+ }
516
+ / SYM_INTERVAL_DELIM val:time_value SYM_INTERVAL_DELIM {
517
+ def value
518
+ OpenEHR::AssumedLibraryTypes::Interval.new(
519
+ :lower => val.value,
520
+ :lower => val.value,
521
+ :upper_included => true,
522
+ :lower_included => true)
523
+ end
524
+ }
525
+ end
526
+
527
+ rule date_time_value
528
+ V_ISO8601_EXTENDED_DATE_TIME {
529
+ def value
530
+ OpenEHR::AssumedLibraryTypes::ISO8601DateTime.new(text_value)
531
+ end
532
+ }
533
+ end
534
+
535
+ rule date_time_list_value
536
+ date_time_value more_dt:(',' date_time_value)+ {
537
+ def value
538
+ date_times.map {|t| t.value}
539
+ end
540
+
541
+ def date_times
542
+ [date_time_value] + more_dt.elements.map {|dt| dt.date_time_value}
543
+ end
544
+ }
545
+ / date_time_value ',' SYM_LIST_CONTINUE {
546
+ def value
547
+ [date_time_value.value]
548
+ end
549
+ }
550
+ end
551
+
552
+ rule date_time_interval_value
553
+ SYM_INTERVAL_DELIM SYM_GT lo:date_time_value SYM_ELLIPSIS SYM_LT up:date_time_value SYM_INTERVAL_DELIM {
554
+ def value
555
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
556
+ :upper => up.value,
557
+ :lower_included => false,
558
+ :upper_included => false)
559
+ end
560
+ }
561
+ / SYM_INTERVAL_DELIM SYM_GT lo:date_time_value SYM_ELLIPSIS up:date_time_value SYM_INTERVAL_DELIM {
562
+ def value
563
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
564
+ :upper => up.value,
565
+ :lower_included => false,
566
+ :upper_included => true)
567
+ end
568
+ }
569
+ / SYM_INTERVAL_DELIM lo:date_time_value SYM_ELLIPSIS SYM_LT up:date_time_value SYM_INTERVAL_DELIM {
570
+ def value
571
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
572
+ :upper => up.value,
573
+ :lower_included => true,
574
+ :upper_included => false)
575
+ end
576
+ }
577
+ / SYM_INTERVAL_DELIM lo:date_time_value SYM_ELLIPSIS up:date_time_value SYM_INTERVAL_DELIM {
578
+ def value
579
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
580
+ :upper => up.value,
581
+ :lower_included => true,
582
+ :upper_included => true)
583
+ end
584
+ }
585
+ / SYM_INTERVAL_DELIM SYM_LT up:date_time_value SYM_INTERVAL_DELIM {
586
+ def value
587
+ OpenEHR::AssumedLibraryTypes::Interval.new(
588
+ :upper => up.value,
589
+ :lower_unbounded => true,
590
+ :upper_included => false)
591
+ end
592
+ }
593
+ / SYM_INTERVAL_DELIM SYM_LE up:date_time_value SYM_INTERVAL_DELIM {
594
+ def value
595
+ OpenEHR::AssumedLibraryTypes::Interval.new(
596
+ :upper => up.value,
597
+ :lower_unbounded => true,
598
+ :upper_included => true)
599
+ end
600
+ }
601
+ / SYM_INTERVAL_DELIM SYM_GT lo:date_time_value SYM_INTERVAL_DELIM {
602
+ def value
603
+ OpenEHR::AssumedLibraryTypes::Interval.new(
604
+ :lower => lo.value,
605
+ :uppper_unbounded => true,
606
+ :lower_included => false)
607
+ end
608
+ }
609
+ / SYM_INTERVAL_DELIM SYM_GE date_time_value SYM_INTERVAL_DELIM {
610
+ def value
611
+ OpenEHR::AssumedLibraryTypes::Interval.new(
612
+ :lower => up.value,
613
+ :upper_unbounded => true,
614
+ :lower_included => true)
615
+ end
616
+ }
617
+ / SYM_INTERVAL_DELIM val:date_time_value SYM_INTERVAL_DELIM {
618
+ def value
619
+ OpenEHR::AssumedLibraryTypes::Interval.new(
620
+ :lower => val.value,
621
+ :lower => val.value,
622
+ :upper_included => true,
623
+ :lower_included => true)
624
+ end
625
+ }
626
+ end
627
+
628
+ rule duration_value
629
+ V_ISO8601_DURATION {
630
+ def value
631
+ OpenEHR::AssumedLibraryTypes::ISO8601Duration(text_value)
632
+ end
633
+ }
634
+ end
635
+
636
+ rule duration_list_value
637
+ duration_value more_d:(',' duration_value)+ {
638
+ def value
639
+ durations.map {|d| d.value}
640
+ end
641
+
642
+ def durations
643
+ [duration_value] + more_d.elements.map {|d| d.duration_value}
644
+ end
645
+ }
646
+ / duration_value ',' SYM_LIST_CONTINUE {
647
+ def value
648
+ [duration_valuel.value]
649
+ end
650
+ }
651
+ end
652
+
653
+ rule duration_interval_value
654
+ SYM_INTERVAL_DELIM SYM_GT lo:duration_value SYM_ELLIPSIS SYM_LT up:duration_value SYM_INTERVAL_DELIM {
655
+ def value
656
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
657
+ :upper => up.value,
658
+ :lower_included => false,
659
+ :upper_included => false)
660
+ end
661
+ }
662
+ / SYM_INTERVAL_DELIM SYM_GT lo:duration_value SYM_ELLIPSIS up:duration_value SYM_INTERVAL_DELIM {
663
+ def value
664
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
665
+ :upper => up.value,
666
+ :lower_included => false,
667
+ :upper_included => true)
668
+ end
669
+ }
670
+ / SYM_INTERVAL_DELIM lo:duration_value SYM_ELLIPSIS SYM_LT up:duration_value SYM_INTERVAL_DELIM {
671
+ def value
672
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
673
+ :upper => up.value,
674
+ :lower_included => true,
675
+ :upper_included => false)
676
+ end
677
+ }
678
+ / SYM_INTERVAL_DELIM lo:duration_value SYM_ELLIPSIS up:duration_value SYM_INTERVAL_DELIM {
679
+ def value
680
+ OpenEHR::AssumedLibraryTypes::Interval.new(:lower => lo.value,
681
+ :upper => up.value,
682
+ :lower_included => true,
683
+ :upper_included => true)
684
+ end
685
+ }
686
+ / SYM_INTERVAL_DELIM SYM_LT up:duration_value SYM_INTERVAL_DELIM {
687
+ def value
688
+ OpenEHR::AssumedLibraryTypes::Interval.new(
689
+ :upper => up.value,
690
+ :lower_unbounded => true,
691
+ :upper_included => false)
692
+ end
693
+ }
694
+ / SYM_INTERVAL_DELIM SYM_LE up:duration_value SYM_INTERVAL_DELIM {
695
+ def value
696
+ OpenEHR::AssumedLibraryTypes::Interval.new(
697
+ :upper => up.value,
698
+ :lower_unbounded => true,
699
+ :upper_included => true)
700
+ end
701
+ }
702
+ / SYM_INTERVAL_DELIM SYM_GT lo:duration_value SYM_INTERVAL_DELIM {
703
+ def value
704
+ OpenEHR::AssumedLibraryTypes::Interval.new(
705
+ :lower => lo.value,
706
+ :uppper_unbounded => true,
707
+ :lower_included => false)
708
+ end
709
+ }
710
+ / SYM_INTERVAL_DELIM SYM_GE duration_value SYM_INTERVAL_DELIM {
711
+ def value
712
+ OpenEHR::AssumedLibraryTypes::Interval.new(
713
+ :lower => up.value,
714
+ :upper_unbounded => true,
715
+ :lower_included => true)
716
+ end
717
+ }
718
+ / SYM_INTERVAL_DELIM val:duration_value SYM_INTERVAL_DELIM {
719
+ def value
720
+ OpenEHR::AssumedLibraryTypes::Interval.new(
721
+ :lower => val.value,
722
+ :lower => val.value,
723
+ :upper_included => true,
724
+ :lower_included => true)
725
+ end
726
+ }
727
+ end
728
+
729
+ rule ALPHANUM
730
+ [a-zA-Z0-9]
731
+ end
732
+
733
+ rule IDCHAR
734
+ [a-zA-Z0-9_]
735
+ end
736
+
737
+ rule NAMECHAR
738
+ [a-zA-Z0-9\._\-]
739
+ end
740
+
741
+ rule NAMECHAR_SPACE
742
+ [a-zA-Z0-9\._\- ]
743
+ end
744
+
745
+ rule NAMECHAR_PAREN
746
+ [a-zA-Z0-9\._\-\(\)]
747
+ end
748
+
749
+ rule NAMESTR
750
+ [a-zA-Z] [a-zA-Z0-9_]+
751
+ end
752
+
753
+ rule space
754
+ COMMENT* white_space
755
+ end
756
+
757
+ rule COMMENT
758
+ white_space '--' [^\n]* "\n"
759
+ end
760
+
761
+ rule white_space
762
+ [ \t\r\n]*
763
+ end
764
+
765
+ rule Minus_code
766
+ '-'
767
+ end
768
+
769
+ rule Plus_Code
770
+ '+'
771
+ end
772
+
773
+ rule Star_code
774
+ '*'
775
+ end
776
+
777
+ rule Slash_code
778
+ '/'
779
+ end
780
+
781
+ rule Carret_code
782
+ '^'
783
+ end
784
+
785
+ rule Dot_code
786
+ '.'
787
+ end
788
+
789
+ rule Semicolon_code
790
+ ';'
791
+ end
792
+
793
+ rule Colon_code
794
+ ':'
795
+ end
796
+
797
+ rule Comma_code
798
+ ','
799
+ end
800
+
801
+ rule Expclamation_code
802
+ '!'
803
+ end
804
+
805
+ rule Left_parenthesis_code
806
+ '('
807
+ end
808
+
809
+ rule Right_parenthesis_code
810
+ ')'
811
+ end
812
+
813
+ rule Dollar_code
814
+ '$'
815
+ end
816
+
817
+ rule SYM_DT_UNKNOWN
818
+ '??'
819
+ end
820
+
821
+ rule Question_mark_code
822
+ '?'
823
+ end
824
+
825
+ rule SYM_INTERVAL_DELIM
826
+ '|'
827
+ end
828
+
829
+ rule Left_bracket_code
830
+ '[' space
831
+ end
832
+
833
+ rule Right_bracket_codde
834
+ ']'
835
+ end
836
+
837
+ rule SYM_EQ
838
+ '=' white_space
839
+ end
840
+
841
+ rule SYM_GE
842
+ '=>'
843
+ end
844
+
845
+ rule SYM_LE
846
+ '<='
847
+ end
848
+
849
+ rule SYM_LT
850
+ '<'
851
+ end
852
+
853
+ rule SYM_GT
854
+ '>'
855
+ end
856
+
857
+ rule SYM_START_DBLOCK
858
+ '<' space
859
+ end
860
+
861
+ rule SYM_END_DBLOCK
862
+ '>' space
863
+ end
864
+
865
+ rule SYM_START_CBLOCK
866
+ '{' space
867
+ end
868
+
869
+ rule SYM_END_CBLOCK
870
+ '}' space
871
+ end
872
+
873
+ rule SYM_ELLIPSIS
874
+ '..'
875
+ end
876
+
877
+ rule SYM_LIST_CONTINUE
878
+ '...'
879
+ end
880
+
881
+ rule SYM_INFINITY
882
+ [Ii] [Nn] [Ff] [Ii] [Nn] [Ii] [Tt] [Yy] space
883
+ end
884
+
885
+ rule SYM_ARCHETYPE
886
+ [Aa] [Rr] [Cc] [Hh] [Ee] [Tt] [Yy] [Pp] [Ee] space
887
+ end
888
+
889
+ rule SYM_MATCHES
890
+ ([Mm] [Aa] [Tt] [Cc] [Hh] [Ee] [Ss] / [Ii] [Ss] '_' [Ii] [Nn]) white_space
891
+ end
892
+
893
+ rule SYM_THEN
894
+ [Tt] [Hh] [Ee] [Nn] space
895
+ end
896
+
897
+ rule SYM_ELSE
898
+ [Ee] [Ll] [Ss] [Ee] space
899
+ end
900
+
901
+ rule SYM_AND
902
+ [Aa] [Nn] [Dd] space
903
+ end
904
+
905
+ rule SYM_OR
906
+ [Oo] [Rr] space
907
+ end
908
+
909
+ rule SYM_XOR
910
+ [Xx] [Oo] [Rr] space
911
+ end
912
+
913
+ rule SYM_NOT
914
+ [Nn] [Oo] [Tt] space
915
+ end
916
+
917
+ rule SYM_IMPLIES
918
+ [Ii] [Mm] [Pp] [Ll] [Ii] [Ee] [Ss] space
919
+ end
920
+
921
+ rule SYM_TRUE
922
+ [Tt] [Rr] [Uu] [Ee] space
923
+ end
924
+
925
+ rule SYM_FALSE
926
+ [Ff] [Aa] [Ll] [Ss] [Ee] space
927
+ end
928
+
929
+ rule SYM_FORALL
930
+ [Ff] [Oo] [Rr] '_' [Aa] [Ll] [Ll] space
931
+ end
932
+
933
+ rule SYM_EXISTS
934
+ [Ee] [Xx] [Ii] [Ss] [Tt] [Ss] space
935
+ end
936
+
937
+ rule SYM_EXISTENCE
938
+ [Ee] [Xx] [Ii] [Ss] [Tt] [Ee] [Nn] [Cc] [Ee] space
939
+ end
940
+
941
+ rule SYM_OCCURRENCES
942
+ [Oo] [Cc] [Cc] [Uu] [Rr] [Rr] [Ee] [Nn] [Cc] [Ee] [Ss] white_space
943
+ end
944
+
945
+ rule SYM_CARDINALITY
946
+ [Cc] [Aa] [Rr] [Dd] [Ii] [Nn] [Aa] [Ll] [Ii] [Tt] [Yy] white_space
947
+ end
948
+
949
+ rule SYM_ORDERED
950
+ [Oo] [Rr] [Dd] [Ee] [Rr] [Ee] [Dd] white_space
951
+ end
952
+
953
+ rule SYM_UNORDERD
954
+ [Uu] [Nn] [Oo] [Rr] [Dd] [Ee] [Rr] [Ee] [Dd] white_space
955
+ end
956
+
957
+ rule SYM_UNIQUE
958
+ [Uu] [Nn] [Ii] [Qq] [Uu] [Ee] white_space
959
+ end
960
+
961
+ rule SYM_INFINITY
962
+ [Ii] [Nn] [Ff] [Ii] [Nn] [Ii] [Tt] [Yy] space
963
+ end
964
+
965
+ rule SYM_USE_NODE
966
+ [Uu] [Ss] [Ee] '_' [Nn] [Oo] [Dd] [Ee] space
967
+ end
968
+
969
+ rule SYM_ALLOW_ARCHETYPE
970
+ ([Aa] [Ll] [Ll] [Oo] [Ww] / [Uu] [Ss] [Ee]) '_' [Aa] [Rr] [Cc] [Hh] [Ee] [Tt] [Yy] [Pp] [Ee] space
971
+ end
972
+
973
+ rule SYM_INCLUDE
974
+ [Ii] [Nn] [Cc] [Ll] [Uu] [Dd] [Ee] space
975
+ end
976
+
977
+ rule SYM_EXCLUDE
978
+ [Ee] [Xx] [Cc] [Ll] [Uu] [Dd] [Ee] space
979
+ end
980
+
981
+ rule SYM_TEMPLATE_COMPONENT
982
+ [Tt] [Ee] [Mm] [Pp] [Ll] [Aa] [Tt] [Ee] ' _' [Cc] [Oo] [Mm] [Pp] [Oo] [Nn] [Ee] [Nn] [Tt] space
983
+ end
984
+
985
+ rule SYM_TEMPLATE
986
+ [Tt] [Ee] [Mm] [Pp] [Ll] [Aa] [Tt] [Ee] space
987
+ end
988
+
989
+ rule SYM_OPERATIONAL_TEMPLATE
990
+ [Oo] [Pp] [Ee] [Rr] [Aa] [Tt] [Ii] [Oo] [Nn] [Aa] [Ll] '_' [Tt] [Ee] [Mm] [Pp] [Ll] [Aa] [Tt] [Ee] space
991
+ end
992
+
993
+ rule SYM_ADL_VERSION
994
+ [Aa] [Dd] [Ll] '_' [Vv] [Ee] [Rr] [Ss] [Ii] [Oo] [Nn] space
995
+ end
996
+
997
+ rule SYM_IS_CONTROLLED
998
+ [Cc] [Oo] [Nn] [Tt] [Rr] [Oo] [Ll] [Ll] [Ee] [Dd] space
999
+ end
1000
+
1001
+ rule SYM_IS_GENERATED
1002
+ [Gg] [Ee] [Nn] [Ee] [Rr] [Aa] [Tt] [Ee] [Dd] space
1003
+ end
1004
+
1005
+ rule SYM_SPECIALIZE
1006
+ [Ss] [Pp] [Ee] [Cc] [Ii] [Aa] [Ll] [Ii] [SsZz] [Ee] space
1007
+ end
1008
+
1009
+ rule SYM_CONCEPT
1010
+ [Cc] [Oo] [Nn] [Cc] [Ee] [Pp] [Tt] space
1011
+ end
1012
+
1013
+ rule SYM_LANGUAGE
1014
+ [Ll] [Aa] [Nn] [Gg] [Uu] [Aa] [Gg] [Ee] space
1015
+ end
1016
+
1017
+ rule SYM_DESCRIPTION
1018
+ [Dd] [Ee] [Ss] [Cc] [Rr] [Ii] [Pp] [Tt] [Ii] [Oo] [Nn] space
1019
+ end
1020
+
1021
+ rule SYM_DEFINITION
1022
+ [Dd] [Ee] [Ff] [Ii] [Nn] [Ii] [Tt] [Ii] [Oo] [Nn] space
1023
+ end
1024
+
1025
+ rule SYM_INVARIANT
1026
+ [Ii] [Nn] [Vv] [Aa] [Rr] [Ii] [Aa] [Nn] [Tt] space
1027
+ end
1028
+
1029
+ rule SYM_ONTOLOGY
1030
+ [Oo] [Nn] [Tt] [Oo] [Ll] [Oo] [Gg] [Yy] space
1031
+ end
1032
+
1033
+ rule SYM_ANNOTATIONS
1034
+ [Aa] [Nn] [Nn] [Oo] [Tt] [Aa] [Tt] [Ii] [Oo] [Nn] [Ss] space
1035
+ end
1036
+
1037
+ rule V_VERSION_STRING
1038
+ [0-9]+ '.' [0-9]+ ('.' [0-9]+)* {
1039
+ def value
1040
+ text_value
1041
+ end
1042
+ }
1043
+ end
1044
+
1045
+ rule V_ARCHETYPE_ID
1046
+ NAMESTR ('-' NAMESTR) 2..2 '.' NAMESTR ('-' NAMESTR)* '.v' [1-9] [0-9]* {
1047
+ def value
1048
+ text_value
1049
+ end
1050
+ }
1051
+ end
1052
+
1053
+ rule V_IDENTIFIER
1054
+ [a-zA-Z] [a-zA-Z0-9_]* {
1055
+ def value
1056
+ text_value
1057
+ end
1058
+ }
1059
+ end
1060
+
1061
+ rule V_URI
1062
+ [a-z]+ '://' [^<>|\\{}^~"\[\] ]* {
1063
+ def value
1064
+ text_value
1065
+ end
1066
+ }
1067
+ end
1068
+
1069
+ rule V_QUALIFIED_TERM_CODE_REF
1070
+ '[' qtc:(NAMECHAR_PAREN+ '::' NAMECHAR+) ']' {
1071
+ def value
1072
+ qtc.text_value
1073
+ end
1074
+ }
1075
+ end
1076
+
1077
+ rule ERR_V_QUALIFIED_TERM_CODE_REF
1078
+ '[' er:(NAMECHAR_PAREN+ '::' NAMECHAR_SPACE+) ']' {
1079
+ def value
1080
+ er.text_value
1081
+ end
1082
+ }
1083
+ end
1084
+
1085
+ rule V_LOCAL_TERM_CODE_REF
1086
+ '[' lt:(ALPHANUM NAMECHAR*) ']' {
1087
+ def value
1088
+ lt.text_value
1089
+ end
1090
+ }
1091
+ end
1092
+
1093
+ rule V_LOCAL_CODE
1094
+ 'a' [ct] [0-9\.]+ {
1095
+ def value
1096
+ text_value
1097
+ end
1098
+ }
1099
+ end
1100
+
1101
+ rule V_ISO8601_EXTENDED_DATE_TIME
1102
+ ([0-9] 4..4 '-' [0-1] [0-9] '-' [0-3] [0-9] 'T' [0-2] [0-9] ':' [0-6] [0-9] ':' [0-6] [0-9] (',' [0-9]+)? ('Z' / [+-] [0-9] 4..4)? ) / ([0-9] 4..4 '-' [0-1] [0-9] '-' [0-3] [0-9] 'T' [0-2] [0-9] ':' [0-6] [0-9] ('Z' / [+-] [0-9] 4..4)?) / ([0-9] 4..4 '-' [0-1] [0-9] '-' [0-3] [0-9] 'T' [0-2] [0-9] ('Z' / [+-] [0-9] 4..4)?)
1103
+ end
1104
+
1105
+ rule V_ISO8601_EXTENDED_TIME
1106
+ [0-2] [0-9] ':' [0-6] [0-9] ':' [0-6] [0-9] (',' [0-9]+)? ('Z' / [+-] [0-9] 4..4)? / [0-2] [0-9] ':' [0-6] [0-9] (Z / [+-] [0-9] 4..4)?
1107
+ end
1108
+
1109
+ rule V_ISO8601_EXTENDED_DATE
1110
+ [0-9] 4..4 '-' [0-1] [0-9] '-' [0-3] [0-9] / [0-9] 4..4 '-' [0-1] [0-9]
1111
+ end
1112
+
1113
+ rule V_ISO8601_DURATION
1114
+ 'P' ([0-9]+ [yY])? ([0-9]+ [mM])? ([0-9]+ [wW])? ([0-9]+ [dD])? 'T' ([0-9]+ [hH])? ([0-9]+ [mM])? ([0-9]+ [sS])?
1115
+ end
1116
+
1117
+ rule V_ISO8601_DATE_CONSTRAINT_PATTERN
1118
+ [yY] [yY] [yY] [yY] '-' [mM?X] [mM?X] '-' [dD?X] [dD?X]
1119
+ end
1120
+
1121
+ rule V_ISO8601_TIME_CONSTRAINT_PATTERN
1122
+ [hH] [hH] ':' [mM?X] [mM?X] ':' [sS?X] [sS?X]
1123
+ end
1124
+
1125
+ rule V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN
1126
+ [yY] [yY] [yY] [yY] '-' [mM?X] [mM?X] '-' [dD?X] [dD?X] [Tt] [hH?X] [hH?X] ':' [mM?X] [mM?X] ':' [sS?X] [sS?X]
1127
+ end
1128
+
1129
+ rule V_ISO8601_DURATION_CONSTRAINT_PATTERN
1130
+ 'P' [yY]? [mM]? [wW]? [dD]? 'T' [hH]? [mM]? [sS]? / 'P' [yY]? [mM]? [wW]? [dD]?
1131
+ end
1132
+
1133
+ rule V_TYPE_IDENTIFIER
1134
+ [A-Z] IDCHAR* {
1135
+ def value
1136
+ text_value
1137
+ end
1138
+ }
1139
+ end
1140
+
1141
+ rule V_GENERIC_TYPE_IDENTIFIER
1142
+ [A-Z] IDCHAR* '<' [a-zA-Z0-9,_<>]+ '>' {
1143
+ def value
1144
+ text_value
1145
+ end
1146
+ }
1147
+ end
1148
+
1149
+ rule V_ATTRIBUTE_IDENTIFIER
1150
+ [a-z] IDCHAR* {
1151
+ def value
1152
+ text_value
1153
+ end
1154
+ }
1155
+ end
1156
+
1157
+ rule V_INTEGER
1158
+ [0-9] {
1159
+ def value
1160
+ text_value.to_i
1161
+ end
1162
+ }
1163
+ / [1-9] [0-9]+ {
1164
+ def value
1165
+ text_value.to_i
1166
+ end
1167
+ }
1168
+ / [0-9]+ [eE] [+-]? [0-9] {
1169
+ def value
1170
+ text_value.to_i
1171
+ end
1172
+ }
1173
+ end
1174
+
1175
+ rule V_REAL
1176
+ [0-9] '.' [0-9]+ / [1-9] [0-9]+ '.' [0-9]+ / [0-9]+ '.' [0-9]+ [eE] [+-]? [0-9]+ {
1177
+ def value
1178
+ text_value.to_f
1179
+ end
1180
+ }
1181
+ end
1182
+
1183
+ rule V_CHAR
1184
+ [^\\\n\"] {
1185
+ def value
1186
+ text_value
1187
+ end
1188
+ }
1189
+ end
1190
+
1191
+ rule V_STRING
1192
+ '"' str:((!'"' . / '\"')*) '"' {
1193
+ def value
1194
+ str.text_value
1195
+ end
1196
+ }
1197
+ end
1198
+ end
1199
+ end
1200
+ end