open_ehr 0.6.1 → 0.9.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 (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