3 * This file and its contents are supplied under the terms of the
4 * Common Development and Distribution License ("CDDL"), version 1.0.
5 * You may only use this file in accordance with the terms of version
8 * A full copy of the text of the CDDL should have accompanied this
9 * source. A copy of the CDDL is also available via the Internet at
10 * http://www.illumos.org/license/CDDL.
14 * Copyright 2010 Nexenta Systems, Inc. All rights reserved.
15 * Copyright 2013 DEY Storage Systems, Inc.
19 * POSIX localedef grammar.
25 #include "localedef.h"
77 %token T_COLLATING_SYMBOL
78 %token T_COLLATING_ELEMENT
93 %token T_INT_CURR_SYMBOL
94 %token T_CURRENCY_SYMBOL
95 %token T_MON_DECIMAL_POINT
96 %token T_MON_THOUSANDS_SEP
97 %token T_POSITIVE_SIGN
98 %token T_NEGATIVE_SIGN
100 %token T_INT_FRAC_DIGITS
102 %token T_P_CS_PRECEDES
103 %token T_P_SEP_BY_SPACE
104 %token T_N_CS_PRECEDES
105 %token T_N_SEP_BY_SPACE
108 %token T_INT_P_CS_PRECEDES
109 %token T_INT_N_CS_PRECEDES
110 %token T_INT_P_SEP_BY_SPACE
111 %token T_INT_N_SEP_BY_SPACE
112 %token T_INT_P_SIGN_POSN
113 %token T_INT_N_SIGN_POSN
115 %token T_DECIMAL_POINT
116 %token T_THOUSANDS_SEP
135 %token
<token
> T_NAME
136 %token
<num
> T_NUMBER
137 %token
<token
> T_SYMBOL
138 %token
<collsym
> T_COLLSYM
139 %token
<collelem
> T_COLLELEM
143 localedef
: setting_list categories
147 string : T_QUOTE charlist T_QUOTE
151 charlist
: charlist T_CHAR
161 setting_list
: setting_list setting
166 setting
: T_COM_CHAR T_CHAR T_NL
170 | T_ESC_CHAR T_CHAR T_NL
174 | T_MB_CUR_MAX T_NUMBER T_NL
178 | T_MB_CUR_MIN T_NUMBER T_NL
182 | T_CODE_SET
string T_NL
184 wchar_t *w
= get_wcs
();
185 set_wide_encoding
(to_mb_string
(w
));
188 | T_CODE_SET T_NAME T_NL
190 set_wide_encoding
($2);
194 copycat
: T_COPY T_NAME T_NL
200 wchar_t *w
= get_wcs
();
201 copy_category
(to_mb_string
(w
));
206 categories
: categories category
221 charmap
: T_CHARMAP T_NL charmap_list T_END T_CHARMAP T_NL
222 | T_WIDTH T_NL width_list T_END T_WIDTH T_NL
226 charmap_list
: charmap_list charmap_entry
231 charmap_entry
: T_SYMBOL T_CHAR
236 | T_SYMBOL T_ELLIPSIS T_SYMBOL T_CHAR
238 add_charmap_range
($1, $3, $4);
244 width_list
: width_list width_entry
248 width_entry
: T_CHAR T_NUMBER T_NL
252 | T_SYMBOL T_NUMBER T_NL
254 add_charmap_undefined
($1);
256 | T_CHAR T_ELLIPSIS T_CHAR T_NUMBER T_NL
258 add_width_range
($1, $3, $4);
260 | T_SYMBOL T_ELLIPSIS T_SYMBOL T_NUMBER T_NL
262 add_charmap_undefined
($1);
263 add_charmap_undefined
($3);
265 | T_CHAR T_ELLIPSIS T_SYMBOL T_NUMBER T_NL
268 add_charmap_undefined
($3);
270 | T_SYMBOL T_ELLIPSIS T_CHAR T_NUMBER T_NL
273 add_charmap_undefined
($1);
278 ctype
: T_CTYPE T_NL ctype_list T_END T_CTYPE T_NL
282 | T_CTYPE T_NL copycat T_END T_CTYPE T_NL
285 ctype_list
: ctype_list ctype_kw
289 ctype_kw
: T_ISUPPER cc_list T_NL
290 | T_ISLOWER cc_list T_NL
291 | T_ISALPHA cc_list T_NL
292 | T_ISDIGIT cc_list T_NL
293 | T_ISPUNCT cc_list T_NL
294 | T_ISXDIGIT cc_list T_NL
295 | T_ISSPACE cc_list T_NL
296 | T_ISPRINT cc_list T_NL
297 | T_ISGRAPH cc_list T_NL
298 | T_ISBLANK cc_list T_NL
299 | T_ISCNTRL cc_list T_NL
300 | T_ISALNUM cc_list T_NL
301 | T_ISSPECIAL cc_list T_NL
302 | T_ISENGLISH cc_list T_NL
303 | T_ISNUMBER cc_list T_NL
304 | T_ISIDEOGRAM cc_list T_NL
305 | T_ISPHONOGRAM cc_list T_NL
306 | T_TOUPPER conv_list T_NL
307 | T_TOLOWER conv_list T_NL
311 cc_list
: cc_list T_SEMI T_CHAR
315 | cc_list T_SEMI T_SYMBOL
317 add_charmap_undefined
($3);
319 | cc_list T_SEMI T_ELLIPSIS T_SEMI T_CHAR
321 /* note that the endpoints *must* be characters */
330 add_charmap_undefined
($1);
334 conv_list
: conv_list T_SEMI conv_pair
339 conv_pair
: T_LPAREN T_CHAR T_COMMA T_CHAR T_RPAREN
341 add_caseconv
($2, $4);
343 | T_LPAREN T_SYMBOL T_COMMA T_CHAR T_RPAREN
345 add_charmap_undefined
($2);
347 | T_LPAREN T_SYMBOL T_COMMA T_SYMBOL T_RPAREN
349 add_charmap_undefined
($2);
350 add_charmap_undefined
($4);
352 | T_LPAREN T_CHAR T_COMMA T_SYMBOL T_RPAREN
354 add_charmap_undefined
($4);
358 collate
: T_COLLATE T_NL coll_order T_END T_COLLATE T_NL
362 | T_COLLATE T_NL coll_optional coll_order T_END T_COLLATE T_NL
366 | T_COLLATE T_NL copycat T_END T_COLLATE T_NL
370 coll_optional
: coll_optional coll_symbols
371 | coll_optional coll_elements
377 coll_symbols
: T_COLLATING_SYMBOL T_SYMBOL T_NL
384 coll_elements
: T_COLLATING_ELEMENT T_SYMBOL T_FROM
string T_NL
386 define_collelem
($2, get_wcs
());
390 coll_order
: T_ORDER_START T_NL order_list T_ORDER_END T_NL
392 /* If no order list supplied default to one forward */
393 add_order_bit
(T_FORWARD
);
394 add_order_directive
();
396 | T_ORDER_START order_args T_NL order_list T_ORDER_END T_NL
400 order_args
: order_args T_SEMI order_arg
402 add_order_directive
();
406 add_order_directive
();
410 order_arg
: order_arg T_COMMA order_dir
414 order_dir
: T_FORWARD
416 add_order_bit
(T_FORWARD
);
420 add_order_bit
(T_BACKWARD
);
424 add_order_bit
(T_POSITION
);
428 order_list
: order_list order_item
432 order_item
: T_COLLSYM T_NL
434 end_order_collsym
($1);
440 | order_itemkw order_weights T_NL
446 order_itemkw
: T_CHAR
448 start_order_char
($1);
452 start_order_ellipsis
();
456 start_order_collelem
($1);
460 start_order_undefined
();
464 start_order_symbol
($1);
468 order_weights
: order_weights T_SEMI order_weight
469 | order_weights T_SEMI
473 order_weight
: T_COLLELEM
475 add_order_collelem
($1);
479 add_order_collsym
($1);
487 add_order_ellipsis
();
495 add_order_symbol
($1);
497 | T_QUOTE order_str T_QUOTE
503 order_str
: order_str order_stritem
507 order_stritem
: T_CHAR
513 add_subst_collsym
($1);
517 add_subst_collelem
($1);
521 add_subst_symbol
($1);
525 messages
: T_MESSAGES T_NL messages_list T_END T_MESSAGES T_NL
529 | T_MESSAGES T_NL copycat T_END T_MESSAGES T_NL
532 messages_list
: messages_list messages_item
536 messages_kw
: T_YESSTR
542 messages_item
: messages_kw
string T_NL
544 add_message
(get_wcs
());
548 monetary
: T_MONETARY T_NL monetary_list T_END T_MONETARY T_NL
552 | T_MONETARY T_NL copycat T_END T_MONETARY T_NL
555 monetary_list
: monetary_list monetary_kw
559 monetary_strkw
: T_INT_CURR_SYMBOL
561 | T_MON_DECIMAL_POINT
562 | T_MON_THOUSANDS_SEP
567 monetary_numkw
: T_INT_FRAC_DIGITS
575 | T_INT_P_CS_PRECEDES
576 | T_INT_N_CS_PRECEDES
577 | T_INT_P_SEP_BY_SPACE
578 | T_INT_N_SEP_BY_SPACE
583 monetary_kw
: monetary_strkw
string T_NL
585 add_monetary_str
(get_wcs
());
587 | monetary_numkw T_NUMBER T_NL
589 add_monetary_num
($2);
591 | T_MON_GROUPING mon_group_list T_NL
594 mon_group_list
: T_NUMBER
596 reset_monetary_group
();
597 add_monetary_group
($1);
599 | mon_group_list T_SEMI T_NUMBER
601 add_monetary_group
($3);
606 numeric
: T_NUMERIC T_NL numeric_list T_END T_NUMERIC T_NL
610 | T_NUMERIC T_NL copycat T_END T_NUMERIC T_NL
614 numeric_list
: numeric_list numeric_item
619 numeric_item
: numeric_strkw
string T_NL
621 add_numeric_str
(get_wcs
());
623 | T_GROUPING group_list T_NL
626 numeric_strkw
: T_DECIMAL_POINT
631 group_list
: T_NUMBER
633 reset_numeric_group
();
634 add_numeric_group
($1);
636 | group_list T_SEMI T_NUMBER
638 add_numeric_group
($3);
643 time
: T_TIME T_NL time_kwlist T_END T_TIME T_NL
647 | T_TIME T_NL copycat T_END T_NUMERIC T_NL
650 time_kwlist
: time_kwlist time_kw
654 time_kw
: time_strkw
string T_NL
656 add_time_str
(get_wcs
());
658 | time_listkw time_list T_NL
664 time_listkw
: T_ABDAY
673 time_strkw
: T_ERA_D_T_FMT
683 time_list
: time_list T_SEMI
string
685 add_time_list
(get_wcs
());
690 add_time_list
(get_wcs
());