source: ruby/trunk/adl_parser/lib/cparser.y@ 14

Last change on this file since 14 was 14, checked in by Tatsukawa, Akimichi, 16 years ago

working on V_C_DOMAIN_TYPE mini parser

File size: 21.4 KB
RevLine 
[4]1
2
3class OpenEHR::CADLParser
4
5#options omit_action_call
6
7prechigh
8
9 nonassoc UMINUS UPLUS
10# left '*' '/'
11 left Star_code Slash_code
12 left '+' '-'
13
14 nonassoc SYM_EQ
15 nonassoc SYM_NE
16 nonassoc SYM_LT
17 nonassoc SYM_START_DBLOCK
18 nonassoc SYM_GT
19 nonassoc SYM_END_DBLOCK
20 nonassoc SYM_LE
21 nonassoc SYM_GE
22
23preclow
24
25
26rule
27 ### http://svn.openehr.org/ref_impl_eiffel/TRUNK/components/adl_parser/src/syntax/cadl/parser/cadl_validator.y
28
29cadl: input EOF
30input: c_complex_object
31 | assertions
32# | error
33
34c_complex_object: c_complex_object_head SYM_MATCHES SYM_START_CBLOCK c_complex_object_body SYM_END_CBLOCK
35
36c_complex_object_head: c_complex_object_id c_occurrences
37
38c_complex_object_id: type_identifier
39 | type_identifier V_LOCAL_TERM_CODE_REF
40
41c_complex_object_body: c_any #-- used to indicate that any value of a type is ok
42 | c_attributes
43
44
45#------------------------- node types -----------------------
46
47c_object: c_complex_object
48 | archetype_internal_ref
49 | archetype_slot
50 | constraint_ref
51 | c_code_phrase
52 | c_ordinal
53 | c_primitive_object
[14]54 | v_c_domain_type
55# | V_C_DOMAIN_TYPE
[4]56 | ERR_C_DOMAIN_TYPE
57 | error
58
[14]59
[4]60# 'archetype_internal_ref' is a node that refers to a previously defined object node in the same archetype.
61archetype_internal_ref: SYM_USE_NODE type_identifier c_occurrences absolute_path
62 | SYM_USE_NODE type_identifier error
63
64# 'archetype_slot' is a node whose statements define a constraint that determines which other archetypes may appear at that point in the current archetype.
65archetype_slot: c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes c_excludes SYM_END_CBLOCK
66
67c_archetype_slot_head: c_archetype_slot_id c_occurrences
68
69c_archetype_slot_id: SYM_ALLOW_ARCHETYPE type_identifier
70 | SYM_ALLOW_ARCHETYPE type_identifier V_LOCAL_TERM_CODE_REF
71 | SYM_ALLOW_ARCHETYPE error
72
73# 'c_primitive_object' is an node representing a constraint on a primitive object type.
74c_primitive_object: c_primitive
75
76c_primitive: c_integer
77 | c_real
78 | c_date
79 | c_time
80 | c_date_time
81 | c_duration
82 | c_string
83 | c_boolean
84
85c_any: Star_code
86#c_any: '*'
87
88#---------------- BODY - relationships ----------------
89
90c_attributes: c_attribute
91 | c_attributes c_attribute
92
93# 'c_attribute' is a node representing a constraint on an attribute in an object model.
94c_attribute: c_attr_head SYM_MATCHES SYM_START_CBLOCK c_attr_values SYM_END_CBLOCK
95 | c_attr_head SYM_MATCHES SYM_START_CBLOCK error SYM_END_CBLOCK
96
97
98c_attr_head: V_ATTRIBUTE_IDENTIFIER c_existence
99 | V_ATTRIBUTE_IDENTIFIER c_existence c_cardinality
100
101c_attr_values: c_object
102 | c_attr_values c_object
103 | c_any # -- to allow a property to have any value
104
105c_includes: #-- Empty
106 | SYM_INCLUDE assertions
107
108c_excludes: #-- Empty
109 | SYM_EXCLUDE assertions
110
111
112#---------------------- ASSERTIONS ------------------------
113
114assertions: assertion
115 | assertions assertion
116
117assertion: any_identifier ':' boolean_expression
118 | boolean_expression
119# | any_identifier ':' error
120
121#---------------------- expressions ---------------------
122
123boolean_expression: boolean_leaf
124 | boolean_node
125
126boolean_node: SYM_EXISTS absolute_path
127# | SYM_EXISTS error
128 | relative_path SYM_MATCHES SYM_START_CBLOCK c_primitive SYM_END_CBLOCK
129 | SYM_NOT boolean_leaf
130 | arithmetic_expression '=' arithmetic_expression
131 | arithmetic_expression SYM_NE arithmetic_expression
132 | arithmetic_expression SYM_LT arithmetic_expression
133 | arithmetic_expression SYM_GT arithmetic_expression
134 | arithmetic_expression SYM_LE arithmetic_expression
135 | arithmetic_expression SYM_GE arithmetic_expression
136 | boolean_expression SYM_AND boolean_expression
137 | boolean_expression SYM_OR boolean_expression
138 | boolean_expression SYM_XOR boolean_expression
139 | boolean_expression SYM_IMPLIES boolean_expression
140
141boolean_leaf: Left_parenthesis_code boolean_expression Right_parenthesis_code
142 | SYM_TRUE
143 | SYM_FALSE
144
145arithmetic_expression: arithmetic_leaf
146 | arithmetic_node
147
148arithmetic_node: arithmetic_expression '+' arithmetic_leaf
149 | arithmetic_expression '-' arithmetic_leaf
150 | arithmetic_expression Star_code arithmetic_leaf
151 | arithmetic_expression Slash_code arithmetic_leaf
152 | arithmetic_expression '^' arithmetic_leaf
153
154arithmetic_leaf: Left_parenthesis_code arithmetic_expression Right_parenthesis_code
155 | integer_value
156 | real_value
157 | absolute_path
158
159
160#--------------- THE FOLLOWING SOURCE TAKEN FROM OG_PATH_VALIDATOR.Y - DO NOT MODIFY -------------
161#--------------- except to remove movable_path ----------------------------------------------------
162
163absolute_path: Slash_code
164 | Slash_code relative_path
165 | absolute_path Slash_code relative_path
166
167relative_path: path_segment
168 | relative_path Slash_code path_segment
169
170path_segment: V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF
171 | V_ATTRIBUTE_IDENTIFIER
172
173
174#-------------------------------- END SOURCE TAKEN FROM OG_PATH_VALIDATOR.Y ----------------------
175
176
177#---------------- existence, occurrences, cardinality ----------------
178
179c_existence: #-- default to 1..1
180 | SYM_EXISTENCE SYM_MATCHES SYM_START_CBLOCK existence_spec SYM_END_CBLOCK
181
182existence_spec: V_INTEGER #-- can only be 0 or 1
183 | V_INTEGER SYM_ELLIPSIS V_INTEGER #-- can only be 0..0, 0..1, 1..1
184
185c_cardinality: SYM_CARDINALITY SYM_MATCHES SYM_START_CBLOCK cardinality_spec SYM_END_CBLOCK
186
187cardinality_spec: occurrence_spec
188 | occurrence_spec Semicolon_code SYM_ORDERED
189 | occurrence_spec Semicolon_code SYM_UNORDERED
190 | occurrence_spec Semicolon_code SYM_UNIQUE
191 | occurrence_spec Semicolon_code SYM_ORDERED Semicolon_code SYM_UNIQUE
192 | occurrence_spec Semicolon_code SYM_UNORDERED Semicolon_code SYM_UNIQUE
193 | occurrence_spec Semicolon_code SYM_UNIQUE Semicolon_code SYM_ORDERED
194 | occurrence_spec Semicolon_code SYM_UNIQUE Semicolon_code SYM_UNORDERED
195
196cardinality_limit_value: integer_value
197 | Star_code
198# | '*'
199
200c_occurrences: #-- default to 1..1
201 | SYM_OCCURRENCES SYM_MATCHES SYM_START_CBLOCK occurrence_spec SYM_END_CBLOCK
202# | SYM_OCCURRENCES error
203
204occurrence_spec: cardinality_limit_value #-- single integer or '*'
205 | V_INTEGER SYM_ELLIPSIS cardinality_limit_value
206
207#---------------------- leaf constraint types -----------------------
208
209c_integer_spec: integer_value
210 | integer_list_value
211 | integer_interval_value
212
213c_integer: c_integer_spec
214 | c_integer_spec Semicolon_code integer_value
215 | c_integer_spec Semicolon_code error
216
217c_real_spec: real_value
218 | real_list_value
219 | real_interval_value
220
221c_real: c_real_spec
222 | c_real_spec Semicolon_code real_value
223 | c_real_spec Semicolon_code error
224
225c_date_constraint: V_ISO8601_DATE_CONSTRAINT_PATTERN
226 | date_value
227 | date_interval_value
228
229c_date: c_date_constraint
230 | c_date_constraint Semicolon_code date_value
231 | c_date_constraint Semicolon_code error
232
233c_time_constraint: V_ISO8601_TIME_CONSTRAINT_PATTERN
234 | time_value
235 | time_interval_value
236
237c_time: c_time_constraint
238 | c_time_constraint Semicolon_code time_value
239 | c_time_constraint Semicolon_code error
240
241c_date_time_constraint: V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN
242 | date_time_value
243 | date_time_interval_value
244
245c_date_time: c_date_time_constraint
246 | c_date_time_constraint Semicolon_code date_time_value
247 | c_date_time_constraint Semicolon_code error
248
249c_duration_constraint: duration_pattern
250 | duration_pattern Slash_code duration_interval_value
251 | duration_value
252 | duration_interval_value
253
254c_duration: c_duration_constraint
255 | c_duration_constraint Semicolon_code duration_value
256 | c_duration_constraint Semicolon_code error
257
258c_string_spec: V_STRING #-- single value, generates closed list
259 | string_list_value #-- closed list
260 | string_list_value ',' SYM_LIST_CONTINUE #-- open list
261 | V_REGEXP #-- regular expression with "//" or "^^" delimiters
262
263c_string: c_string_spec
264 | c_string_spec Semicolon_code string_value
265# | c_string_spec Semicolon_code error
266
267c_boolean_spec: SYM_TRUE
268 | SYM_FALSE
269 | SYM_TRUE ',' SYM_FALSE
270 | SYM_FALSE ',' SYM_TRUE
271
272c_boolean: c_boolean_spec
273 | c_boolean_spec Semicolon_code boolean_value
274# | c_boolean_spec ';' error
275
276c_ordinal: c_ordinal_spec
277 | c_ordinal_spec Semicolon_code integer_value
278# | c_ordinal_spec ';' error
279
280c_ordinal_spec: ordinal
281 | c_ordinal_spec ',' ordinal
282
283ordinal: integer_value SYM_INTERVAL_DELIM V_QUALIFIED_TERM_CODE_REF
284
285c_code_phrase: V_TERM_CODE_CONSTRAINT #-- e.g. "[local::at0040, at0041; at0040]"
286 | V_QUALIFIED_TERM_CODE_REF
287
288# A Constraint_Ref is a proxy for a set of constraints on an object.
289constraint_ref: V_LOCAL_TERM_CODE_REF #-- e.g. "ac0003"
290
291any_identifier: type_identifier
292 | V_ATTRIBUTE_IDENTIFIER
293
294
295#----------------- TAKEN FROM DADL_VALIDATOR.Y -------------------
296#----------------- DO NOT MODIFY -------------------
297#---------------------- BASIC DATA VALUES -----------------------
298
299type_identifier: V_TYPE_IDENTIFIER
300 | V_GENERIC_TYPE_IDENTIFIER
301
302string_value: V_STRING
303
304string_list_value: V_STRING ',' V_STRING
305 | string_list_value ',' V_STRING
306 | V_STRING ',' SYM_LIST_CONTINUE
307
308integer_value: V_INTEGER
309 | '+' V_INTEGER
310 | '-' V_INTEGER
311
312integer_list_value: integer_value ',' integer_value
313 | integer_list_value ',' integer_value
314 | integer_value ',' SYM_LIST_CONTINUE
315
316integer_interval_value: SYM_INTERVAL_DELIM integer_value SYM_ELLIPSIS integer_value SYM_INTERVAL_DELIM
317 | SYM_INTERVAL_DELIM SYM_GT integer_value SYM_ELLIPSIS integer_value SYM_INTERVAL_DELIM
318 | SYM_INTERVAL_DELIM integer_value SYM_ELLIPSIS SYM_LT integer_value SYM_INTERVAL_DELIM
319 | SYM_INTERVAL_DELIM SYM_GT integer_value SYM_ELLIPSIS SYM_LT integer_value SYM_INTERVAL_DELIM
320 | SYM_INTERVAL_DELIM SYM_LT integer_value SYM_INTERVAL_DELIM
321 | SYM_INTERVAL_DELIM SYM_LE integer_value SYM_INTERVAL_DELIM
322 | SYM_INTERVAL_DELIM SYM_GT integer_value SYM_INTERVAL_DELIM
323 | SYM_INTERVAL_DELIM SYM_GE integer_value SYM_INTERVAL_DELIM
324 | SYM_INTERVAL_DELIM integer_value SYM_INTERVAL_DELIM
325
326real_value: V_REAL
327 | '+' V_REAL
328 | '-' V_REAL
329
330real_list_value: real_value ',' real_value
331 | real_list_value ',' real_value
332 | real_value ',' SYM_LIST_CONTINUE
333
334real_interval_value: SYM_INTERVAL_DELIM real_value SYM_ELLIPSIS real_value SYM_INTERVAL_DELIM
335 | SYM_INTERVAL_DELIM SYM_GT real_value SYM_ELLIPSIS real_value SYM_INTERVAL_DELIM
336 | SYM_INTERVAL_DELIM real_value SYM_ELLIPSIS SYM_LT real_value SYM_INTERVAL_DELIM
337 | SYM_INTERVAL_DELIM SYM_GT real_value SYM_ELLIPSIS SYM_LT real_value SYM_INTERVAL_DELIM
338 | SYM_INTERVAL_DELIM SYM_LT real_value SYM_INTERVAL_DELIM
339 | SYM_INTERVAL_DELIM SYM_LE real_value SYM_INTERVAL_DELIM
340 | SYM_INTERVAL_DELIM SYM_GT real_value SYM_INTERVAL_DELIM
341 | SYM_INTERVAL_DELIM SYM_GE real_value SYM_INTERVAL_DELIM
342 | SYM_INTERVAL_DELIM real_value SYM_INTERVAL_DELIM
343
344boolean_value: SYM_TRUE
345 | SYM_FALSE
346
347boolean_list_value: boolean_value ',' boolean_value
348 | boolean_list_value ',' boolean_value
349 | boolean_value ',' SYM_LIST_CONTINUE
350
351character_value: V_CHARACTER
352
353character_list_value: character_value ',' character_value
354 | character_list_value ',' character_value
355 | character_value ',' SYM_LIST_CONTINUE
356
357date_value: V_ISO8601_EXTENDED_DATE #-- in ISO8601 form yyyy-MM-dd
358
359date_list_value: date_value ',' date_value
360 | date_list_value ',' date_value
361 | date_value ',' SYM_LIST_CONTINUE
362
363date_interval_value: SYM_INTERVAL_DELIM date_value SYM_ELLIPSIS date_value SYM_INTERVAL_DELIM
364 | SYM_INTERVAL_DELIM SYM_GT date_value SYM_ELLIPSIS date_value SYM_INTERVAL_DELIM
365 | SYM_INTERVAL_DELIM date_value SYM_ELLIPSIS SYM_LT date_value SYM_INTERVAL_DELIM
366 | SYM_INTERVAL_DELIM SYM_GT date_value SYM_ELLIPSIS SYM_LT date_value SYM_INTERVAL_DELIM
367 | SYM_INTERVAL_DELIM SYM_LT date_value SYM_INTERVAL_DELIM
368 | SYM_INTERVAL_DELIM SYM_LE date_value SYM_INTERVAL_DELIM
369 | SYM_INTERVAL_DELIM SYM_GT date_value SYM_INTERVAL_DELIM
370 | SYM_INTERVAL_DELIM SYM_GE date_value SYM_INTERVAL_DELIM
371 | SYM_INTERVAL_DELIM date_value SYM_INTERVAL_DELIM
372
373time_value: V_ISO8601_EXTENDED_TIME
374
375time_list_value: time_value ',' time_value
376 | time_list_value ',' time_value
377 | time_value ',' SYM_LIST_CONTINUE
378
379time_interval_value: SYM_INTERVAL_DELIM time_value SYM_ELLIPSIS time_value SYM_INTERVAL_DELIM
380 | SYM_INTERVAL_DELIM SYM_GT time_value SYM_ELLIPSIS time_value SYM_INTERVAL_DELIM
381 | SYM_INTERVAL_DELIM time_value SYM_ELLIPSIS SYM_LT time_value SYM_INTERVAL_DELIM
382 | SYM_INTERVAL_DELIM SYM_GT time_value SYM_ELLIPSIS SYM_LT time_value SYM_INTERVAL_DELIM
383 | SYM_INTERVAL_DELIM SYM_LT time_value SYM_INTERVAL_DELIM
384 | SYM_INTERVAL_DELIM SYM_LE time_value SYM_INTERVAL_DELIM
385 | SYM_INTERVAL_DELIM SYM_GT time_value SYM_INTERVAL_DELIM
386 | SYM_INTERVAL_DELIM SYM_GE time_value SYM_INTERVAL_DELIM
387 | SYM_INTERVAL_DELIM time_value SYM_INTERVAL_DELIM
388
389date_time_value: V_ISO8601_EXTENDED_DATE_TIME
390
391date_time_list_value: date_time_value ',' date_time_value
392 | date_time_list_value ',' date_time_value
393 | date_time_value ',' SYM_LIST_CONTINUE
394
395date_time_interval_value: SYM_INTERVAL_DELIM date_time_value SYM_ELLIPSIS date_time_value SYM_INTERVAL_DELIM
396 | SYM_INTERVAL_DELIM SYM_GT date_time_value SYM_ELLIPSIS date_time_value SYM_INTERVAL_DELIM
397 | SYM_INTERVAL_DELIM date_time_value SYM_ELLIPSIS SYM_LT date_time_value SYM_INTERVAL_DELIM
398 | SYM_INTERVAL_DELIM SYM_GT date_time_value SYM_ELLIPSIS SYM_LT date_time_value SYM_INTERVAL_DELIM
399 | SYM_INTERVAL_DELIM SYM_LT date_time_value SYM_INTERVAL_DELIM
400 | SYM_INTERVAL_DELIM SYM_LE date_time_value SYM_INTERVAL_DELIM
401 | SYM_INTERVAL_DELIM SYM_GT date_time_value SYM_INTERVAL_DELIM
402 | SYM_INTERVAL_DELIM SYM_GE date_time_value SYM_INTERVAL_DELIM
403 | SYM_INTERVAL_DELIM date_time_value SYM_INTERVAL_DELIM
404
405duration_pattern: V_ISO8601_DURATION_CONSTRAINT_PATTERN
406
407duration_value: V_ISO8601_DURATION
408
409duration_list_value: duration_value ',' duration_value
410 | duration_list_value ',' duration_value
411 | duration_value ',' SYM_LIST_CONTINUE
412
413duration_interval_value: SYM_INTERVAL_DELIM duration_value SYM_ELLIPSIS duration_value SYM_INTERVAL_DELIM
414 | SYM_INTERVAL_DELIM SYM_GT duration_value SYM_ELLIPSIS duration_value SYM_INTERVAL_DELIM
415 | SYM_INTERVAL_DELIM duration_value SYM_ELLIPSIS SYM_LT duration_value SYM_INTERVAL_DELIM
416 | SYM_INTERVAL_DELIM SYM_GT duration_value SYM_ELLIPSIS SYM_LT duration_value SYM_INTERVAL_DELIM
417 | SYM_INTERVAL_DELIM SYM_LT duration_value SYM_INTERVAL_DELIM
418 | SYM_INTERVAL_DELIM SYM_LE duration_value SYM_INTERVAL_DELIM
419 | SYM_INTERVAL_DELIM SYM_GT duration_value SYM_INTERVAL_DELIM
420 | SYM_INTERVAL_DELIM SYM_GE duration_value SYM_INTERVAL_DELIM
421 | SYM_INTERVAL_DELIM duration_value SYM_INTERVAL_DELIM
422
423term_code: V_QUALIFIED_TERM_CODE_REF
424 | ERR_V_QUALIFIED_TERM_CODE_REF
425
426term_code_list_value: term_code ',' term_code
427 | term_code_list_value ',' term_code
428 | term_code ',' SYM_LIST_CONTINUE
429
430uri_value: V_URI
431
432
433---- header
434
435$:.unshift File.join(File.dirname(__FILE__))
436$DEBUG = false
437
438
439---- inner
440###----------/* keywords */ ---------------------------------------------
441@@reserved = {
442 'then' => :SYM_THEN,
443 'else' => :SYM_ELSE,
444 'and' => :SYM_AND,
445 'or' => :SYM_OR,
446 'xor' => :SYM_XOR,
447 'not' => :SYM_NOT,
448 'implies' => :SYM_IMPLIES,
449 'true' => :SYM_TRUE, #[Tt][Rr][Uu][Ee] -- -> SYM_TRUE
450 'false' => :SYM_FALSE, # [Ff][Aa][Ll][Ss][Ee] -- -> SYM_FALSE
451 'forall' => :SYM_FORALL,
452 'exists' => :SYM_EXISTS,
453 'existence' => :SYM_EXISTENCE,
454 'occurrences' => :SYM_OCCURRENCES,
455 'cardinality' => :SYM_CARDINALITY,
456 'ordered' => :SYM_ORDERED,
457 'unordered' => :SYM_UNORDERED,
458 'unique' => :SYM_UNIQUE,
459 'matches' => :SYM_MATCHES,
460 'is_in' => :SYM_MATCHES,
461 'invariant' => :SYM_INVARIANT,
462 'infinity' => :SYM_INFINITY, # [Ii][Nn][Ff][Ii][Nn][Ii][Tt][Yy] -- -> SYM_INFINITY
463 'use_archetype' => :SYM_ALLOW_ARCHETYPE,
464 'allow_archetype' => :SYM_ALLOW_ARCHETYPE,
465 'include' => :SYM_INCLUDE,
466 'exclude' => :SYM_EXCLUDE
467}
468
469###----------/* Scanner */ -----------------------------------------------
470
471def scan
472 until @data.nil? do
473 case @data
474 when /\A\n/ # carriage return
475 @lineno += 1
476 ;
477 when /\A[ \t\r\f]+/ #just drop it
478 ;
479 when /\A--.*\n/ # single line comment
480 @lineno += 1
481 ;
482 ###----------/* symbols */ -------------------------------------------------
483 when /\A\=/ # =
484 yield :SYM_EQ, :SYM_EQ
485 when /\A\>=/ # >=
486 yield :SYM_GE, :SYM_GE
487 when /\A\<=/ # <=
488 yield :SYM_LE, :SYM_LE
489 when /\A\</ # <
490 yield :SYM_LT, :SYM_LT
491 when /\A\>/ # >
492 yield :SYM_GT, :SYM_GT
493 when /\A\-/ # -
494 yield :Minus_code, :Minus_code
495 when /\A\+/ # +
496 yield :Plus_code, :Plus_code
497 when /\A\*/ # *
498 yield :Star_code, :Star_code
499 when /\A\// # /
500 yield :Slash_code, :Slash_code
501 when /\A\^/ # ^
502 yield :Caret_code, :Caret_code
503 when /\A\.\./ # ..
504 yield :SYM_ELLIPSIS, :SYM_ELLIPSIS
505 when /\A\./ # .
506 yield :Dot_code, :Dot_code
507 when /\A\;/ # ;
508 yield :Semicolon_code, :Semicolon_code
509 when /\A\,/ # ,
510 yield :Comma_code, :Comma_code
511 when /\A\:/ # :
512 yield :Colon_code, :Colon_code
513 when /\A\!/ # !
514 yield :Exclamation_code, :Exclamation_code
515 when /\A\(/ # (
516 yield :Left_parenthesis_code, :Left_parenthesis_code
517 when /\A\)/ # )
518 yield :Right_parenthesis_code, :Right_parenthesis_code
519 when /\A\{/ # {
520 yield :SYM_START_CBLOCK, :SYM_START_CBLOCK
521 when /\A\}/ # {
522 yield :SYM_END_CBLOCK, :SYM_END_CBLOCK
523 when /\A\$/ # $
524 yield :Dollar_code, :Dollar_code
525 when /\A\?\?/ # ??
526 yield :SYM_DT_UNKNOWN, :SYM_DT_UNKNOWN
527 when /\A\?/ # ?
528 yield :Question_mark_code, :Question_mark_code
529 when /\A\|/ # |
530 if @in_interval
531 @in_interval = false
532 elsif @start_block_received
533 @in_interval = true
534 @start_block_received = false
535 end
536 yield :SYM_INTERVAL_DELIM, :SYM_INTERVAL_DELIM
537 when /\A\[[a-zA-Z0-9._\-]+::[a-zA-Z0-9._\-]+\]/ #V_QUALIFIED_TERM_CODE_REF form [ICD10AM(1998)::F23]
538 yield :V_QUALIFIED_TERM_CODE_REF, $&
539 when /\A\[[a-zA-Z0-9._\- ]+::[a-zA-Z0-9._\- ]+\]/ #ERR_V_QUALIFIED_TERM_CODE_REF
540 yield :ERR_V_QUALIFIED_TERM_CODE_REF, $&
541 when /\A\[([a-zA-Z0-9()._\-]+::[a-zA-Z0-9._\_-]+)\]/
542 yield :V_TERM_CODE_CONSTRAINT, :V_TERM_CODE_CONSTRAINT
543 when /\A\[[a-zA-Z0-9][a-zA-Z0-9._\-]*\]/ #V_LOCAL_TERM_CODE_REF
544 yield :V_LOCAL_TERM_CODE_REF, $&
545 when /\A\[/ # [
546 yield :Left_bracket_code, :Left_bracket_code
547 when /\A\]/ # ]
548 yield :Right_bracket_code, :Right_bracket_code
549 when /\A\.../ # ...
550 yield :SYM_LIST_CONTINUE, :SYM_LIST_CONTINUE
551 when /\A[a-z][a-zA-Z0-9_]*/
552 word = $&.downcase
553 if @@reserved[word]
554 yield @@reserved[word], @@reserved[word]
555 else #V_ATTRIBUTE_IDENTIFIER /\A[a-z][a-zA-Z0-9_]*/
556 yield :V_ATTRIBUTE_IDENTIFIER, $&
557 end
558 when /\Aa[ct][0-9.]+/ #V_LOCAL_CODE
559 yield :V_LOCAL_CODE, $&
560 when /\A[0-9]{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})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})?|[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9](Z|[+-][0-9]{4})?/ #V_ISO8601_EXTENDED_DATE_TIME YYYY-MM-DDThh:mm:ss[,sss][Z|+/- -n-n-n-n-]-
561 yield :V_ISO8601_EXTENDED_DATE_TIME, $&
562 when /\A[0-2][0-9]:[0-6][0-9]:[0-6][0-9](,[0-9]+)?(Z|[+-][0-9]{4})?|[0-2][0-9]:[0-6][0-9](Z|[+-][0-9]{4})? / #V_ISO8601_EXTENDED_TIME hh:mm:ss[,sss][Z|+/-nnnn]
563 yield :V_ISO8601_EXTENDED_TIME, $&
564 when /\A[0-9]{4}-[0-1][0-9]-[0-3][0-9]|[0-9]{4}-[0-1][0-9]/ #V_ISO8601_EXTENDED_DATE YYYY-MM-DD
565 yield :V_ISO8601_EXTENDED_DATE, $&
566 when /\AP([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?T([0-9]+[hH])?([0-9]+[mM])?([0-9]+[sS])?|P([0-9]+[yY])?([0-9]+[mM])?([0-9]+[wW])?([0-9]+[dD])?/ #V_ISO8601_DURATION PnYnMnWnDTnnHnnMnnS
567 yield :V_ISO8601_DURATION, $&
568 when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X]/
569 yield :V_ISO8601_DATE_CONSTRAINT_PATTERN, $&
570 when /\A[hH][hH]:[mM?X][mM?X]:[sS?X][sS?X]/
571 yield :V_ISO8601_TIME_CONSTRAINT_PATTERN, $&
572 when /\A[yY][yY][yY][yY]-[mM?X][mM?X]-[dD?X][dD?X][\t][hH?X][hH?X]:[mM?X][mM?X]:[sS?X][sS?X]/
573 yield :V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN, $&
574 when /\A[A-Z][a-zA-Z0-9_]*/
575 yield :V_TYPE_IDENTIFIER, $&
576 when /\A[a-z][a-zA-Z0-9_]*/
577 yield :V_ATTRIBUTE_IDENTIFIER, $&
578 when /\A[A-Z][a-zA-Z0-9_]*<[a-zA-Z0-9,_<>]+>/ #V_GENERIC_TYPE_IDENTIFIER
579 yield :V_GENERIC_TYPE_IDENTIFIER, $&
580 when /\A[0-9]+|[0-9]+[eE][+-]?[0-9]+/ #V_INTEGER
581 yield :V_INTEGER, $&
582 when /\A[0-9]+\.[0-9]+|[0-9]+\.[0-9]+[eE][+-]?[0-9]+ / #V_REAL
583 yield :V_REAL, $&
584# when /\A"((?:[^"\\]+|\\.)*)"/ #V_STRING
585 when /\A"([^"]*)"/m #V_STRING
586 yield :V_STRING, $1
587### when /\A{\// #V_REGEXP
588### if @in_regexp
589### @in_regexp = false
590### elsif @start_block_received
591### @in_interval = true
592### @start_block_received = false
593### end
594### yield :V_REGEXP, :V_REGEXP
595 when /\A[a-z]+:\/\/[^<>|\\{}^~"\[\] ]*/ #V_URI
596 yield :V_URI, $&
597 when /\A\S/ #UTF8CHAR
598 yield :UTF8CHAR, $&
599 end
600 @data = $' # variable $' receives the string after the match
601 end
602 yield :EOF, nil
603 yield false, '$'
604end # of scan
605
606
607def parse(data, filename, lineno = 1, debug = false)
608 @yydebug = true
609 @parsestring = data
610 @data = data
611 @lineno = lineno
612 @filename = filename
613 @in_interval = false
614 @start_block_received = false
615 @start_block_received = false
616 yyparse self, :scan
617end
618
619def on_error( t, v, values)
620 raise Racc::ParseError, "#{@filename}:#{@lineno}: Inline syntax error on #{v.inspect}"
621end
622
623# ###----------/* CADL Blocks */ -------------------------------------------
624# \{[^{}]* -- beginning of CADL block
625# <IN_CADL_BLOCK>\{[^{}]* -- got an open brace
626# <IN_CADL_BLOCK>[^{}]*\} -- got a close brace
627
628
629
630
631
632
633### Local Variables:
634### mode:ruby
635### mode:font-lock
636### comment-column:0
637### comment-start: "### "
638### comment-end:""
639### End:
640
641
642
643
Note: See TracBrowser for help on using the repository browser.