16b5e5868SGarrett D'Amore %{ 26b5e5868SGarrett D'Amore /* 36b5e5868SGarrett D'Amore * This file and its contents are supplied under the terms of the 46b5e5868SGarrett D'Amore * Common Development and Distribution License ("CDDL"), version 1.0. 55aec55ebSGarrett D'Amore * You may only use this file in accordance with the terms of version 65aec55ebSGarrett D'Amore * 1.0 of the CDDL. 76b5e5868SGarrett D'Amore * 86b5e5868SGarrett D'Amore * A full copy of the text of the CDDL should have accompanied this 96b5e5868SGarrett D'Amore * source. A copy of the CDDL is also available via the Internet at 106b5e5868SGarrett D'Amore * http://www.illumos.org/license/CDDL. 116b5e5868SGarrett D'Amore */ 126b5e5868SGarrett D'Amore 136b5e5868SGarrett D'Amore /* 146b5e5868SGarrett D'Amore * Copyright 2010 Nexenta Systems, Inc. All rights reserved. 15*2da1cd3aSGarrett D'Amore * Copyright 2013 DEY Storage Systems, Inc. 166b5e5868SGarrett D'Amore */ 176b5e5868SGarrett D'Amore 186b5e5868SGarrett D'Amore /* 196b5e5868SGarrett D'Amore * POSIX localedef grammar. 206b5e5868SGarrett D'Amore */ 216b5e5868SGarrett D'Amore 226b5e5868SGarrett D'Amore #include <wchar.h> 236b5e5868SGarrett D'Amore #include <stdio.h> 246b5e5868SGarrett D'Amore #include <limits.h> 256b5e5868SGarrett D'Amore #include "localedef.h" 266b5e5868SGarrett D'Amore 276b5e5868SGarrett D'Amore %} 286b5e5868SGarrett D'Amore %union { 296b5e5868SGarrett D'Amore int num; 306b5e5868SGarrett D'Amore wchar_t wc; 316b5e5868SGarrett D'Amore char *token; 326b5e5868SGarrett D'Amore collsym_t *collsym; 336b5e5868SGarrett D'Amore collelem_t *collelem; 346b5e5868SGarrett D'Amore } 356b5e5868SGarrett D'Amore 366b5e5868SGarrett D'Amore %token T_CODE_SET 376b5e5868SGarrett D'Amore %token T_MB_CUR_MAX 386b5e5868SGarrett D'Amore %token T_MB_CUR_MIN 396b5e5868SGarrett D'Amore %token T_COM_CHAR 406b5e5868SGarrett D'Amore %token T_ESC_CHAR 416b5e5868SGarrett D'Amore %token T_LT 426b5e5868SGarrett D'Amore %token T_GT 436b5e5868SGarrett D'Amore %token T_NL 446b5e5868SGarrett D'Amore %token T_SEMI 456b5e5868SGarrett D'Amore %token T_COMMA 466b5e5868SGarrett D'Amore %token T_ELLIPSIS 476b5e5868SGarrett D'Amore %token T_RPAREN 486b5e5868SGarrett D'Amore %token T_LPAREN 496b5e5868SGarrett D'Amore %token T_QUOTE 506b5e5868SGarrett D'Amore %token T_NULL 516b5e5868SGarrett D'Amore %token T_WS 526b5e5868SGarrett D'Amore %token T_END 536b5e5868SGarrett D'Amore %token T_COPY 546b5e5868SGarrett D'Amore %token T_CHARMAP 556b5e5868SGarrett D'Amore %token T_WIDTH 566b5e5868SGarrett D'Amore %token T_CTYPE 576b5e5868SGarrett D'Amore %token T_ISUPPER 586b5e5868SGarrett D'Amore %token T_ISLOWER 596b5e5868SGarrett D'Amore %token T_ISALPHA 606b5e5868SGarrett D'Amore %token T_ISDIGIT 616b5e5868SGarrett D'Amore %token T_ISPUNCT 626b5e5868SGarrett D'Amore %token T_ISXDIGIT 636b5e5868SGarrett D'Amore %token T_ISSPACE 646b5e5868SGarrett D'Amore %token T_ISPRINT 656b5e5868SGarrett D'Amore %token T_ISGRAPH 666b5e5868SGarrett D'Amore %token T_ISBLANK 676b5e5868SGarrett D'Amore %token T_ISCNTRL 686b5e5868SGarrett D'Amore %token T_ISALNUM 696b5e5868SGarrett D'Amore %token T_ISSPECIAL 706b5e5868SGarrett D'Amore %token T_ISPHONOGRAM 716b5e5868SGarrett D'Amore %token T_ISIDEOGRAM 726b5e5868SGarrett D'Amore %token T_ISENGLISH 736b5e5868SGarrett D'Amore %token T_ISNUMBER 746b5e5868SGarrett D'Amore %token T_TOUPPER 756b5e5868SGarrett D'Amore %token T_TOLOWER 766b5e5868SGarrett D'Amore %token T_COLLATE 776b5e5868SGarrett D'Amore %token T_COLLATING_SYMBOL 786b5e5868SGarrett D'Amore %token T_COLLATING_ELEMENT 796b5e5868SGarrett D'Amore %token T_ORDER_START 806b5e5868SGarrett D'Amore %token T_ORDER_END 816b5e5868SGarrett D'Amore %token T_FORWARD 826b5e5868SGarrett D'Amore %token T_BACKWARD 836b5e5868SGarrett D'Amore %token T_POSITION 846b5e5868SGarrett D'Amore %token T_FROM 856b5e5868SGarrett D'Amore %token T_UNDEFINED 866b5e5868SGarrett D'Amore %token T_IGNORE 876b5e5868SGarrett D'Amore %token T_MESSAGES 886b5e5868SGarrett D'Amore %token T_YESSTR 896b5e5868SGarrett D'Amore %token T_NOSTR 906b5e5868SGarrett D'Amore %token T_YESEXPR 916b5e5868SGarrett D'Amore %token T_NOEXPR 926b5e5868SGarrett D'Amore %token T_MONETARY 936b5e5868SGarrett D'Amore %token T_INT_CURR_SYMBOL 946b5e5868SGarrett D'Amore %token T_CURRENCY_SYMBOL 956b5e5868SGarrett D'Amore %token T_MON_DECIMAL_POINT 966b5e5868SGarrett D'Amore %token T_MON_THOUSANDS_SEP 976b5e5868SGarrett D'Amore %token T_POSITIVE_SIGN 986b5e5868SGarrett D'Amore %token T_NEGATIVE_SIGN 996b5e5868SGarrett D'Amore %token T_MON_GROUPING 1006b5e5868SGarrett D'Amore %token T_INT_FRAC_DIGITS 1016b5e5868SGarrett D'Amore %token T_FRAC_DIGITS 1026b5e5868SGarrett D'Amore %token T_P_CS_PRECEDES 1036b5e5868SGarrett D'Amore %token T_P_SEP_BY_SPACE 1046b5e5868SGarrett D'Amore %token T_N_CS_PRECEDES 1056b5e5868SGarrett D'Amore %token T_N_SEP_BY_SPACE 1066b5e5868SGarrett D'Amore %token T_P_SIGN_POSN 1076b5e5868SGarrett D'Amore %token T_N_SIGN_POSN 1086b5e5868SGarrett D'Amore %token T_INT_P_CS_PRECEDES 1096b5e5868SGarrett D'Amore %token T_INT_N_CS_PRECEDES 1106b5e5868SGarrett D'Amore %token T_INT_P_SEP_BY_SPACE 1116b5e5868SGarrett D'Amore %token T_INT_N_SEP_BY_SPACE 1126b5e5868SGarrett D'Amore %token T_INT_P_SIGN_POSN 1136b5e5868SGarrett D'Amore %token T_INT_N_SIGN_POSN 1146b5e5868SGarrett D'Amore %token T_NUMERIC 1156b5e5868SGarrett D'Amore %token T_DECIMAL_POINT 1166b5e5868SGarrett D'Amore %token T_THOUSANDS_SEP 1176b5e5868SGarrett D'Amore %token T_GROUPING 1186b5e5868SGarrett D'Amore %token T_TIME 1196b5e5868SGarrett D'Amore %token T_ABDAY 1206b5e5868SGarrett D'Amore %token T_DAY 1216b5e5868SGarrett D'Amore %token T_ABMON 1226b5e5868SGarrett D'Amore %token T_MON 1236b5e5868SGarrett D'Amore %token T_ERA 1246b5e5868SGarrett D'Amore %token T_ERA_D_FMT 1256b5e5868SGarrett D'Amore %token T_ERA_T_FMT 1266b5e5868SGarrett D'Amore %token T_ERA_D_T_FMT 1276b5e5868SGarrett D'Amore %token T_ALT_DIGITS 1286b5e5868SGarrett D'Amore %token T_D_T_FMT 1296b5e5868SGarrett D'Amore %token T_D_FMT 1306b5e5868SGarrett D'Amore %token T_T_FMT 1316b5e5868SGarrett D'Amore %token T_AM_PM 1326b5e5868SGarrett D'Amore %token T_T_FMT_AMPM 1336b5e5868SGarrett D'Amore %token T_DATE_FMT 1346b5e5868SGarrett D'Amore %token <wc> T_CHAR 1356b5e5868SGarrett D'Amore %token <token> T_NAME 1366b5e5868SGarrett D'Amore %token <num> T_NUMBER 1376b5e5868SGarrett D'Amore %token <token> T_SYMBOL 1386b5e5868SGarrett D'Amore %token <collsym> T_COLLSYM 1396b5e5868SGarrett D'Amore %token <collelem> T_COLLELEM 1406b5e5868SGarrett D'Amore 1416b5e5868SGarrett D'Amore %% 1426b5e5868SGarrett D'Amore 1436b5e5868SGarrett D'Amore localedef : setting_list categories 1446b5e5868SGarrett D'Amore | categories 1456b5e5868SGarrett D'Amore ; 1466b5e5868SGarrett D'Amore 1476b5e5868SGarrett D'Amore string : T_QUOTE charlist T_QUOTE 1486b5e5868SGarrett D'Amore | T_QUOTE T_QUOTE 1496b5e5868SGarrett D'Amore ; 1506b5e5868SGarrett D'Amore 1516b5e5868SGarrett D'Amore charlist : charlist T_CHAR 1526b5e5868SGarrett D'Amore { 1536b5e5868SGarrett D'Amore add_wcs($2); 1546b5e5868SGarrett D'Amore } 1556b5e5868SGarrett D'Amore | T_CHAR 1566b5e5868SGarrett D'Amore { 1576b5e5868SGarrett D'Amore add_wcs($1); 1586b5e5868SGarrett D'Amore } 1596b5e5868SGarrett D'Amore ; 1606b5e5868SGarrett D'Amore 1616b5e5868SGarrett D'Amore setting_list : setting_list setting 1626b5e5868SGarrett D'Amore | setting 1636b5e5868SGarrett D'Amore ; 1646b5e5868SGarrett D'Amore 1656b5e5868SGarrett D'Amore 1666b5e5868SGarrett D'Amore setting : T_COM_CHAR T_CHAR T_NL 1676b5e5868SGarrett D'Amore { 1686b5e5868SGarrett D'Amore com_char = $2; 1696b5e5868SGarrett D'Amore } 1706b5e5868SGarrett D'Amore | T_ESC_CHAR T_CHAR T_NL 1716b5e5868SGarrett D'Amore { 1726b5e5868SGarrett D'Amore esc_char = $2; 1736b5e5868SGarrett D'Amore } 1746b5e5868SGarrett D'Amore | T_MB_CUR_MAX T_NUMBER T_NL 1756b5e5868SGarrett D'Amore { 1766b5e5868SGarrett D'Amore mb_cur_max = $2; 1776b5e5868SGarrett D'Amore } 1786b5e5868SGarrett D'Amore | T_MB_CUR_MIN T_NUMBER T_NL 1796b5e5868SGarrett D'Amore { 1806b5e5868SGarrett D'Amore mb_cur_min = $2; 1816b5e5868SGarrett D'Amore } 1826b5e5868SGarrett D'Amore | T_CODE_SET string T_NL 1836b5e5868SGarrett D'Amore { 1846b5e5868SGarrett D'Amore wchar_t *w = get_wcs(); 1856b5e5868SGarrett D'Amore set_wide_encoding(to_mb_string(w)); 1866b5e5868SGarrett D'Amore free(w); 1876b5e5868SGarrett D'Amore } 1886b5e5868SGarrett D'Amore | T_CODE_SET T_NAME T_NL 1896b5e5868SGarrett D'Amore { 1906b5e5868SGarrett D'Amore set_wide_encoding($2); 1916b5e5868SGarrett D'Amore } 1926b5e5868SGarrett D'Amore ; 1936b5e5868SGarrett D'Amore 1946b5e5868SGarrett D'Amore copycat : T_COPY T_NAME T_NL 1956b5e5868SGarrett D'Amore { 1966b5e5868SGarrett D'Amore copy_category($2); 1976b5e5868SGarrett D'Amore } 1986b5e5868SGarrett D'Amore | T_COPY string T_NL 1996b5e5868SGarrett D'Amore { 2006b5e5868SGarrett D'Amore wchar_t *w = get_wcs(); 2016b5e5868SGarrett D'Amore copy_category(to_mb_string(w)); 2026b5e5868SGarrett D'Amore free(w); 2036b5e5868SGarrett D'Amore } 2046b5e5868SGarrett D'Amore ; 2056b5e5868SGarrett D'Amore 2066b5e5868SGarrett D'Amore categories : categories category 2076b5e5868SGarrett D'Amore | category 2086b5e5868SGarrett D'Amore ; 2096b5e5868SGarrett D'Amore 2106b5e5868SGarrett D'Amore 2116b5e5868SGarrett D'Amore category : charmap 2126b5e5868SGarrett D'Amore | messages 2136b5e5868SGarrett D'Amore | monetary 2146b5e5868SGarrett D'Amore | ctype 2156b5e5868SGarrett D'Amore | collate 2166b5e5868SGarrett D'Amore | numeric 2176b5e5868SGarrett D'Amore | time 2186b5e5868SGarrett D'Amore ; 2196b5e5868SGarrett D'Amore 2206b5e5868SGarrett D'Amore 2216b5e5868SGarrett D'Amore charmap : T_CHARMAP T_NL charmap_list T_END T_CHARMAP T_NL 222*2da1cd3aSGarrett D'Amore | T_WIDTH T_NL width_list T_END T_WIDTH T_NL 223*2da1cd3aSGarrett D'Amore ; 2246b5e5868SGarrett D'Amore 2256b5e5868SGarrett D'Amore 2266b5e5868SGarrett D'Amore charmap_list : charmap_list charmap_entry 2276b5e5868SGarrett D'Amore | charmap_entry 2286b5e5868SGarrett D'Amore ; 2296b5e5868SGarrett D'Amore 2306b5e5868SGarrett D'Amore 2316b5e5868SGarrett D'Amore charmap_entry : T_SYMBOL T_CHAR 2326b5e5868SGarrett D'Amore { 2336b5e5868SGarrett D'Amore add_charmap($1, $2); 2346b5e5868SGarrett D'Amore scan_to_eol(); 2356b5e5868SGarrett D'Amore } 2366b5e5868SGarrett D'Amore | T_SYMBOL T_ELLIPSIS T_SYMBOL T_CHAR 2376b5e5868SGarrett D'Amore { 2386b5e5868SGarrett D'Amore add_charmap_range($1, $3, $4); 2396b5e5868SGarrett D'Amore scan_to_eol(); 2406b5e5868SGarrett D'Amore } 2416b5e5868SGarrett D'Amore | T_NL 2426b5e5868SGarrett D'Amore ; 2436b5e5868SGarrett D'Amore 244*2da1cd3aSGarrett D'Amore width_list : width_list width_entry 245*2da1cd3aSGarrett D'Amore | width_entry 246*2da1cd3aSGarrett D'Amore ; 247*2da1cd3aSGarrett D'Amore 248*2da1cd3aSGarrett D'Amore width_entry : T_CHAR T_NUMBER T_NL 249*2da1cd3aSGarrett D'Amore { 250*2da1cd3aSGarrett D'Amore add_width($1, $2); 251*2da1cd3aSGarrett D'Amore } 252*2da1cd3aSGarrett D'Amore | T_SYMBOL T_NUMBER T_NL 253*2da1cd3aSGarrett D'Amore { 254*2da1cd3aSGarrett D'Amore add_charmap_undefined($1); 255*2da1cd3aSGarrett D'Amore } 256*2da1cd3aSGarrett D'Amore | T_CHAR T_ELLIPSIS T_CHAR T_NUMBER T_NL 257*2da1cd3aSGarrett D'Amore { 258*2da1cd3aSGarrett D'Amore add_width_range($1, $3, $4); 259*2da1cd3aSGarrett D'Amore } 260*2da1cd3aSGarrett D'Amore | T_SYMBOL T_ELLIPSIS T_SYMBOL T_NUMBER T_NL 261*2da1cd3aSGarrett D'Amore { 262*2da1cd3aSGarrett D'Amore add_charmap_undefined($1); 263*2da1cd3aSGarrett D'Amore add_charmap_undefined($3); 264*2da1cd3aSGarrett D'Amore } 265*2da1cd3aSGarrett D'Amore | T_CHAR T_ELLIPSIS T_SYMBOL T_NUMBER T_NL 266*2da1cd3aSGarrett D'Amore { 267*2da1cd3aSGarrett D'Amore add_width($1, $4); 268*2da1cd3aSGarrett D'Amore add_charmap_undefined($3); 269*2da1cd3aSGarrett D'Amore } 270*2da1cd3aSGarrett D'Amore | T_SYMBOL T_ELLIPSIS T_CHAR T_NUMBER T_NL 271*2da1cd3aSGarrett D'Amore { 272*2da1cd3aSGarrett D'Amore add_width($3, $4); 273*2da1cd3aSGarrett D'Amore add_charmap_undefined($1); 274*2da1cd3aSGarrett D'Amore } 275*2da1cd3aSGarrett D'Amore | T_NL 276*2da1cd3aSGarrett D'Amore ; 277*2da1cd3aSGarrett D'Amore 2786b5e5868SGarrett D'Amore ctype : T_CTYPE T_NL ctype_list T_END T_CTYPE T_NL 2796b5e5868SGarrett D'Amore { 2806b5e5868SGarrett D'Amore dump_ctype(); 2816b5e5868SGarrett D'Amore } 2826b5e5868SGarrett D'Amore | T_CTYPE T_NL copycat T_END T_CTYPE T_NL 2836b5e5868SGarrett D'Amore ; 2846b5e5868SGarrett D'Amore 2856b5e5868SGarrett D'Amore ctype_list : ctype_list ctype_kw 2866b5e5868SGarrett D'Amore | ctype_kw 2876b5e5868SGarrett D'Amore ; 2886b5e5868SGarrett D'Amore 2896b5e5868SGarrett D'Amore ctype_kw : T_ISUPPER cc_list T_NL 2906b5e5868SGarrett D'Amore | T_ISLOWER cc_list T_NL 2916b5e5868SGarrett D'Amore | T_ISALPHA cc_list T_NL 2926b5e5868SGarrett D'Amore | T_ISDIGIT cc_list T_NL 2936b5e5868SGarrett D'Amore | T_ISPUNCT cc_list T_NL 2946b5e5868SGarrett D'Amore | T_ISXDIGIT cc_list T_NL 2956b5e5868SGarrett D'Amore | T_ISSPACE cc_list T_NL 2966b5e5868SGarrett D'Amore | T_ISPRINT cc_list T_NL 2976b5e5868SGarrett D'Amore | T_ISGRAPH cc_list T_NL 2986b5e5868SGarrett D'Amore | T_ISBLANK cc_list T_NL 2996b5e5868SGarrett D'Amore | T_ISCNTRL cc_list T_NL 3006b5e5868SGarrett D'Amore | T_ISALNUM cc_list T_NL 3016b5e5868SGarrett D'Amore | T_ISSPECIAL cc_list T_NL 3026b5e5868SGarrett D'Amore | T_ISENGLISH cc_list T_NL 3036b5e5868SGarrett D'Amore | T_ISNUMBER cc_list T_NL 3046b5e5868SGarrett D'Amore | T_ISIDEOGRAM cc_list T_NL 3056b5e5868SGarrett D'Amore | T_ISPHONOGRAM cc_list T_NL 3066b5e5868SGarrett D'Amore | T_TOUPPER conv_list T_NL 3076b5e5868SGarrett D'Amore | T_TOLOWER conv_list T_NL 3086b5e5868SGarrett D'Amore ; 3096b5e5868SGarrett D'Amore 3106b5e5868SGarrett D'Amore 3116b5e5868SGarrett D'Amore cc_list : cc_list T_SEMI T_CHAR 3126b5e5868SGarrett D'Amore { 3136b5e5868SGarrett D'Amore add_ctype($3); 3146b5e5868SGarrett D'Amore } 3156b5e5868SGarrett D'Amore | cc_list T_SEMI T_SYMBOL 3166b5e5868SGarrett D'Amore { 3176b5e5868SGarrett D'Amore add_charmap_undefined($3); 3186b5e5868SGarrett D'Amore } 3196b5e5868SGarrett D'Amore | cc_list T_SEMI T_ELLIPSIS T_SEMI T_CHAR 3206b5e5868SGarrett D'Amore { 3216b5e5868SGarrett D'Amore /* note that the endpoints *must* be characters */ 3226b5e5868SGarrett D'Amore add_ctype_range($5); 3236b5e5868SGarrett D'Amore } 3246b5e5868SGarrett D'Amore | T_CHAR 3256b5e5868SGarrett D'Amore { 3266b5e5868SGarrett D'Amore add_ctype($1); 3276b5e5868SGarrett D'Amore } 3286b5e5868SGarrett D'Amore | T_SYMBOL 3296b5e5868SGarrett D'Amore { 3306b5e5868SGarrett D'Amore add_charmap_undefined($1); 3316b5e5868SGarrett D'Amore } 3326b5e5868SGarrett D'Amore ; 3336b5e5868SGarrett D'Amore 3346b5e5868SGarrett D'Amore conv_list : conv_list T_SEMI conv_pair 3356b5e5868SGarrett D'Amore | conv_pair 3366b5e5868SGarrett D'Amore ; 3376b5e5868SGarrett D'Amore 3386b5e5868SGarrett D'Amore 3396b5e5868SGarrett D'Amore conv_pair : T_LPAREN T_CHAR T_COMMA T_CHAR T_RPAREN 3406b5e5868SGarrett D'Amore { 3416b5e5868SGarrett D'Amore add_caseconv($2, $4); 3426b5e5868SGarrett D'Amore } 3436b5e5868SGarrett D'Amore | T_LPAREN T_SYMBOL T_COMMA T_CHAR T_RPAREN 3446b5e5868SGarrett D'Amore { 3456b5e5868SGarrett D'Amore add_charmap_undefined($2); 3466b5e5868SGarrett D'Amore } 3476b5e5868SGarrett D'Amore | T_LPAREN T_SYMBOL T_COMMA T_SYMBOL T_RPAREN 3486b5e5868SGarrett D'Amore { 3496b5e5868SGarrett D'Amore add_charmap_undefined($2); 3506b5e5868SGarrett D'Amore add_charmap_undefined($4); 3516b5e5868SGarrett D'Amore } 3526b5e5868SGarrett D'Amore | T_LPAREN T_CHAR T_COMMA T_SYMBOL T_RPAREN 3536b5e5868SGarrett D'Amore { 3546b5e5868SGarrett D'Amore add_charmap_undefined($4); 3556b5e5868SGarrett D'Amore } 3566b5e5868SGarrett D'Amore ; 3576b5e5868SGarrett D'Amore 3586b5e5868SGarrett D'Amore collate : T_COLLATE T_NL coll_order T_END T_COLLATE T_NL 3596b5e5868SGarrett D'Amore { 3606b5e5868SGarrett D'Amore dump_collate(); 3616b5e5868SGarrett D'Amore } 3626b5e5868SGarrett D'Amore | T_COLLATE T_NL coll_optional coll_order T_END T_COLLATE T_NL 3636b5e5868SGarrett D'Amore { 3646b5e5868SGarrett D'Amore dump_collate(); 3656b5e5868SGarrett D'Amore } 3666b5e5868SGarrett D'Amore | T_COLLATE T_NL copycat T_END T_COLLATE T_NL 3676b5e5868SGarrett D'Amore ; 3686b5e5868SGarrett D'Amore 3696b5e5868SGarrett D'Amore 3706b5e5868SGarrett D'Amore coll_optional : coll_optional coll_symbols 3716b5e5868SGarrett D'Amore | coll_optional coll_elements 3726b5e5868SGarrett D'Amore | coll_symbols 3736b5e5868SGarrett D'Amore | coll_elements 3746b5e5868SGarrett D'Amore ; 3756b5e5868SGarrett D'Amore 3766b5e5868SGarrett D'Amore 3776b5e5868SGarrett D'Amore coll_symbols : T_COLLATING_SYMBOL T_SYMBOL T_NL 3786b5e5868SGarrett D'Amore { 3796b5e5868SGarrett D'Amore define_collsym($2); 3806b5e5868SGarrett D'Amore } 3816b5e5868SGarrett D'Amore ; 3826b5e5868SGarrett D'Amore 3836b5e5868SGarrett D'Amore 3846b5e5868SGarrett D'Amore coll_elements : T_COLLATING_ELEMENT T_SYMBOL T_FROM string T_NL 3856b5e5868SGarrett D'Amore { 3866b5e5868SGarrett D'Amore define_collelem($2, get_wcs()); 3876b5e5868SGarrett D'Amore } 3886b5e5868SGarrett D'Amore ; 3896b5e5868SGarrett D'Amore 3906b5e5868SGarrett D'Amore coll_order : T_ORDER_START T_NL order_list T_ORDER_END T_NL 3916b5e5868SGarrett D'Amore { 3926b5e5868SGarrett D'Amore /* If no order list supplied default to one forward */ 3936b5e5868SGarrett D'Amore add_order_bit(T_FORWARD); 3946b5e5868SGarrett D'Amore add_order_directive(); 3956b5e5868SGarrett D'Amore } 3966b5e5868SGarrett D'Amore | T_ORDER_START order_args T_NL order_list T_ORDER_END T_NL 3976b5e5868SGarrett D'Amore ; 3986b5e5868SGarrett D'Amore 3996b5e5868SGarrett D'Amore 4006b5e5868SGarrett D'Amore order_args : order_args T_SEMI order_arg 4016b5e5868SGarrett D'Amore { 4026b5e5868SGarrett D'Amore add_order_directive(); 4036b5e5868SGarrett D'Amore } 4046b5e5868SGarrett D'Amore | order_arg 4056b5e5868SGarrett D'Amore { 4066b5e5868SGarrett D'Amore add_order_directive(); 4076b5e5868SGarrett D'Amore } 4086b5e5868SGarrett D'Amore ; 4096b5e5868SGarrett D'Amore 4106b5e5868SGarrett D'Amore order_arg : order_arg T_COMMA order_dir 4116b5e5868SGarrett D'Amore | order_dir 4126b5e5868SGarrett D'Amore ; 4136b5e5868SGarrett D'Amore 4146b5e5868SGarrett D'Amore order_dir : T_FORWARD 4156b5e5868SGarrett D'Amore { 4166b5e5868SGarrett D'Amore add_order_bit(T_FORWARD); 4176b5e5868SGarrett D'Amore } 4186b5e5868SGarrett D'Amore | T_BACKWARD 4196b5e5868SGarrett D'Amore { 4206b5e5868SGarrett D'Amore add_order_bit(T_BACKWARD); 4216b5e5868SGarrett D'Amore } 4226b5e5868SGarrett D'Amore | T_POSITION 4236b5e5868SGarrett D'Amore { 4246b5e5868SGarrett D'Amore add_order_bit(T_POSITION); 4256b5e5868SGarrett D'Amore } 4266b5e5868SGarrett D'Amore ; 4276b5e5868SGarrett D'Amore 4286b5e5868SGarrett D'Amore order_list : order_list order_item 4296b5e5868SGarrett D'Amore | order_item 4306b5e5868SGarrett D'Amore ; 4316b5e5868SGarrett D'Amore 4326b5e5868SGarrett D'Amore order_item : T_COLLSYM T_NL 4336b5e5868SGarrett D'Amore { 4346b5e5868SGarrett D'Amore end_order_collsym($1); 4356b5e5868SGarrett D'Amore } 4366b5e5868SGarrett D'Amore | order_itemkw T_NL 4376b5e5868SGarrett D'Amore { 4386b5e5868SGarrett D'Amore end_order(); 4396b5e5868SGarrett D'Amore } 4406b5e5868SGarrett D'Amore | order_itemkw order_weights T_NL 4416b5e5868SGarrett D'Amore { 4426b5e5868SGarrett D'Amore end_order(); 4436b5e5868SGarrett D'Amore } 4446b5e5868SGarrett D'Amore ; 4456b5e5868SGarrett D'Amore 4466b5e5868SGarrett D'Amore order_itemkw : T_CHAR 4476b5e5868SGarrett D'Amore { 4486b5e5868SGarrett D'Amore start_order_char($1); 4496b5e5868SGarrett D'Amore } 4506b5e5868SGarrett D'Amore | T_ELLIPSIS 4516b5e5868SGarrett D'Amore { 4526b5e5868SGarrett D'Amore start_order_ellipsis(); 4536b5e5868SGarrett D'Amore } 4546b5e5868SGarrett D'Amore | T_COLLELEM 4556b5e5868SGarrett D'Amore { 4566b5e5868SGarrett D'Amore start_order_collelem($1); 4576b5e5868SGarrett D'Amore } 4586b5e5868SGarrett D'Amore | T_UNDEFINED 4596b5e5868SGarrett D'Amore { 4606b5e5868SGarrett D'Amore start_order_undefined(); 4616b5e5868SGarrett D'Amore } 4626b5e5868SGarrett D'Amore | T_SYMBOL 4636b5e5868SGarrett D'Amore { 4646b5e5868SGarrett D'Amore start_order_symbol($1); 4656b5e5868SGarrett D'Amore } 4666b5e5868SGarrett D'Amore ; 4676b5e5868SGarrett D'Amore 4686b5e5868SGarrett D'Amore order_weights : order_weights T_SEMI order_weight 4696b5e5868SGarrett D'Amore | order_weights T_SEMI 4706b5e5868SGarrett D'Amore | order_weight 4716b5e5868SGarrett D'Amore ; 4726b5e5868SGarrett D'Amore 4736b5e5868SGarrett D'Amore order_weight : T_COLLELEM 4746b5e5868SGarrett D'Amore { 4756b5e5868SGarrett D'Amore add_order_collelem($1); 4766b5e5868SGarrett D'Amore } 4776b5e5868SGarrett D'Amore | T_COLLSYM 4786b5e5868SGarrett D'Amore { 4796b5e5868SGarrett D'Amore add_order_collsym($1); 4806b5e5868SGarrett D'Amore } 4816b5e5868SGarrett D'Amore | T_CHAR 4826b5e5868SGarrett D'Amore { 4836b5e5868SGarrett D'Amore add_order_char($1); 4846b5e5868SGarrett D'Amore } 4856b5e5868SGarrett D'Amore | T_ELLIPSIS 4866b5e5868SGarrett D'Amore { 4876b5e5868SGarrett D'Amore add_order_ellipsis(); 4886b5e5868SGarrett D'Amore } 4896b5e5868SGarrett D'Amore | T_IGNORE 4906b5e5868SGarrett D'Amore { 4916b5e5868SGarrett D'Amore add_order_ignore(); 4926b5e5868SGarrett D'Amore } 4936b5e5868SGarrett D'Amore | T_SYMBOL 4946b5e5868SGarrett D'Amore { 4956b5e5868SGarrett D'Amore add_order_symbol($1); 4966b5e5868SGarrett D'Amore } 4976b5e5868SGarrett D'Amore | T_QUOTE order_str T_QUOTE 4986b5e5868SGarrett D'Amore { 4996b5e5868SGarrett D'Amore add_order_subst(); 5006b5e5868SGarrett D'Amore } 5016b5e5868SGarrett D'Amore ; 5026b5e5868SGarrett D'Amore 5036b5e5868SGarrett D'Amore order_str : order_str order_stritem 5046b5e5868SGarrett D'Amore | order_stritem 5056b5e5868SGarrett D'Amore ; 5066b5e5868SGarrett D'Amore 5076b5e5868SGarrett D'Amore order_stritem : T_CHAR 5086b5e5868SGarrett D'Amore { 5096b5e5868SGarrett D'Amore add_subst_char($1); 5106b5e5868SGarrett D'Amore } 5116b5e5868SGarrett D'Amore | T_COLLSYM 5126b5e5868SGarrett D'Amore { 5136b5e5868SGarrett D'Amore add_subst_collsym($1); 5146b5e5868SGarrett D'Amore } 5156b5e5868SGarrett D'Amore | T_COLLELEM 5166b5e5868SGarrett D'Amore { 5176b5e5868SGarrett D'Amore add_subst_collelem($1); 5186b5e5868SGarrett D'Amore } 5196b5e5868SGarrett D'Amore | T_SYMBOL 5206b5e5868SGarrett D'Amore { 5216b5e5868SGarrett D'Amore add_subst_symbol($1); 5226b5e5868SGarrett D'Amore } 5236b5e5868SGarrett D'Amore ; 5246b5e5868SGarrett D'Amore 5256b5e5868SGarrett D'Amore messages : T_MESSAGES T_NL messages_list T_END T_MESSAGES T_NL 5266b5e5868SGarrett D'Amore { 5276b5e5868SGarrett D'Amore dump_messages(); 5286b5e5868SGarrett D'Amore } 5296b5e5868SGarrett D'Amore | T_MESSAGES T_NL copycat T_END T_MESSAGES T_NL 5306b5e5868SGarrett D'Amore ; 5316b5e5868SGarrett D'Amore 5326b5e5868SGarrett D'Amore messages_list : messages_list messages_item 5336b5e5868SGarrett D'Amore | messages_item 5346b5e5868SGarrett D'Amore ; 5356b5e5868SGarrett D'Amore 5366b5e5868SGarrett D'Amore messages_kw : T_YESSTR 5376b5e5868SGarrett D'Amore | T_NOSTR 5386b5e5868SGarrett D'Amore | T_YESEXPR 5396b5e5868SGarrett D'Amore | T_NOEXPR 5406b5e5868SGarrett D'Amore ; 5416b5e5868SGarrett D'Amore 5426b5e5868SGarrett D'Amore messages_item : messages_kw string T_NL 5436b5e5868SGarrett D'Amore { 5446b5e5868SGarrett D'Amore add_message(get_wcs()); 5456b5e5868SGarrett D'Amore } 5466b5e5868SGarrett D'Amore ; 5476b5e5868SGarrett D'Amore 5486b5e5868SGarrett D'Amore monetary : T_MONETARY T_NL monetary_list T_END T_MONETARY T_NL 5496b5e5868SGarrett D'Amore { 5506b5e5868SGarrett D'Amore dump_monetary(); 5516b5e5868SGarrett D'Amore } 5526b5e5868SGarrett D'Amore | T_MONETARY T_NL copycat T_END T_MONETARY T_NL 5536b5e5868SGarrett D'Amore ; 5546b5e5868SGarrett D'Amore 5556b5e5868SGarrett D'Amore monetary_list : monetary_list monetary_kw 5566b5e5868SGarrett D'Amore | monetary_kw 5576b5e5868SGarrett D'Amore ; 5586b5e5868SGarrett D'Amore 5596b5e5868SGarrett D'Amore monetary_strkw : T_INT_CURR_SYMBOL 5606b5e5868SGarrett D'Amore | T_CURRENCY_SYMBOL 5616b5e5868SGarrett D'Amore | T_MON_DECIMAL_POINT 5626b5e5868SGarrett D'Amore | T_MON_THOUSANDS_SEP 5636b5e5868SGarrett D'Amore | T_POSITIVE_SIGN 5646b5e5868SGarrett D'Amore | T_NEGATIVE_SIGN 5656b5e5868SGarrett D'Amore ; 5666b5e5868SGarrett D'Amore 5676b5e5868SGarrett D'Amore monetary_numkw : T_INT_FRAC_DIGITS 5686b5e5868SGarrett D'Amore | T_FRAC_DIGITS 5696b5e5868SGarrett D'Amore | T_P_CS_PRECEDES 5706b5e5868SGarrett D'Amore | T_P_SEP_BY_SPACE 5716b5e5868SGarrett D'Amore | T_N_CS_PRECEDES 5726b5e5868SGarrett D'Amore | T_N_SEP_BY_SPACE 5736b5e5868SGarrett D'Amore | T_P_SIGN_POSN 5746b5e5868SGarrett D'Amore | T_N_SIGN_POSN 5756b5e5868SGarrett D'Amore | T_INT_P_CS_PRECEDES 5766b5e5868SGarrett D'Amore | T_INT_N_CS_PRECEDES 5776b5e5868SGarrett D'Amore | T_INT_P_SEP_BY_SPACE 5786b5e5868SGarrett D'Amore | T_INT_N_SEP_BY_SPACE 5796b5e5868SGarrett D'Amore | T_INT_P_SIGN_POSN 5806b5e5868SGarrett D'Amore | T_INT_N_SIGN_POSN 5816b5e5868SGarrett D'Amore ; 5826b5e5868SGarrett D'Amore 5836b5e5868SGarrett D'Amore monetary_kw : monetary_strkw string T_NL 5846b5e5868SGarrett D'Amore { 5856b5e5868SGarrett D'Amore add_monetary_str(get_wcs()); 5866b5e5868SGarrett D'Amore } 5876b5e5868SGarrett D'Amore | monetary_numkw T_NUMBER T_NL 5886b5e5868SGarrett D'Amore { 5896b5e5868SGarrett D'Amore add_monetary_num($2); 5906b5e5868SGarrett D'Amore } 5916b5e5868SGarrett D'Amore | T_MON_GROUPING mon_group_list T_NL 5926b5e5868SGarrett D'Amore ; 5936b5e5868SGarrett D'Amore 5946b5e5868SGarrett D'Amore mon_group_list : T_NUMBER 5956b5e5868SGarrett D'Amore { 5966b5e5868SGarrett D'Amore reset_monetary_group(); 5976b5e5868SGarrett D'Amore add_monetary_group($1); 5986b5e5868SGarrett D'Amore } 5996b5e5868SGarrett D'Amore | mon_group_list T_SEMI T_NUMBER 6006b5e5868SGarrett D'Amore { 6016b5e5868SGarrett D'Amore add_monetary_group($3); 6026b5e5868SGarrett D'Amore } 6036b5e5868SGarrett D'Amore ; 6046b5e5868SGarrett D'Amore 6056b5e5868SGarrett D'Amore 6066b5e5868SGarrett D'Amore numeric : T_NUMERIC T_NL numeric_list T_END T_NUMERIC T_NL 6076b5e5868SGarrett D'Amore { 6086b5e5868SGarrett D'Amore dump_numeric(); 6096b5e5868SGarrett D'Amore } 6106b5e5868SGarrett D'Amore | T_NUMERIC T_NL copycat T_END T_NUMERIC T_NL 6116b5e5868SGarrett D'Amore ; 6126b5e5868SGarrett D'Amore 6136b5e5868SGarrett D'Amore 6146b5e5868SGarrett D'Amore numeric_list : numeric_list numeric_item 6156b5e5868SGarrett D'Amore | numeric_item 6166b5e5868SGarrett D'Amore ; 6176b5e5868SGarrett D'Amore 6186b5e5868SGarrett D'Amore 6196b5e5868SGarrett D'Amore numeric_item : numeric_strkw string T_NL 6206b5e5868SGarrett D'Amore { 6216b5e5868SGarrett D'Amore add_numeric_str(get_wcs()); 6226b5e5868SGarrett D'Amore } 6236b5e5868SGarrett D'Amore | T_GROUPING group_list T_NL 6246b5e5868SGarrett D'Amore ; 6256b5e5868SGarrett D'Amore 6266b5e5868SGarrett D'Amore numeric_strkw : T_DECIMAL_POINT 6276b5e5868SGarrett D'Amore | T_THOUSANDS_SEP 6286b5e5868SGarrett D'Amore ; 6296b5e5868SGarrett D'Amore 6306b5e5868SGarrett D'Amore 6316b5e5868SGarrett D'Amore group_list : T_NUMBER 6326b5e5868SGarrett D'Amore { 6336b5e5868SGarrett D'Amore reset_numeric_group(); 6346b5e5868SGarrett D'Amore add_numeric_group($1); 6356b5e5868SGarrett D'Amore } 6366b5e5868SGarrett D'Amore | group_list T_SEMI T_NUMBER 6376b5e5868SGarrett D'Amore { 6386b5e5868SGarrett D'Amore add_numeric_group($3); 6396b5e5868SGarrett D'Amore } 6406b5e5868SGarrett D'Amore ; 6416b5e5868SGarrett D'Amore 6426b5e5868SGarrett D'Amore 6436b5e5868SGarrett D'Amore time : T_TIME T_NL time_kwlist T_END T_TIME T_NL 6446b5e5868SGarrett D'Amore { 6456b5e5868SGarrett D'Amore dump_time(); 6466b5e5868SGarrett D'Amore } 6476b5e5868SGarrett D'Amore | T_TIME T_NL copycat T_END T_NUMERIC T_NL 6486b5e5868SGarrett D'Amore ; 6496b5e5868SGarrett D'Amore 6506b5e5868SGarrett D'Amore time_kwlist : time_kwlist time_kw 6516b5e5868SGarrett D'Amore | time_kw 6526b5e5868SGarrett D'Amore ; 6536b5e5868SGarrett D'Amore 6546b5e5868SGarrett D'Amore time_kw : time_strkw string T_NL 6556b5e5868SGarrett D'Amore { 6566b5e5868SGarrett D'Amore add_time_str(get_wcs()); 6576b5e5868SGarrett D'Amore } 6586b5e5868SGarrett D'Amore | time_listkw time_list T_NL 6596b5e5868SGarrett D'Amore { 6606b5e5868SGarrett D'Amore check_time_list(); 6616b5e5868SGarrett D'Amore } 6626b5e5868SGarrett D'Amore ; 6636b5e5868SGarrett D'Amore 6646b5e5868SGarrett D'Amore time_listkw : T_ABDAY 6656b5e5868SGarrett D'Amore | T_DAY 6666b5e5868SGarrett D'Amore | T_ABMON 6676b5e5868SGarrett D'Amore | T_MON 6686b5e5868SGarrett D'Amore | T_ERA 6696b5e5868SGarrett D'Amore | T_ALT_DIGITS 6706b5e5868SGarrett D'Amore | T_AM_PM 6716b5e5868SGarrett D'Amore ; 6726b5e5868SGarrett D'Amore 6736b5e5868SGarrett D'Amore time_strkw : T_ERA_D_T_FMT 6746b5e5868SGarrett D'Amore | T_ERA_T_FMT 6756b5e5868SGarrett D'Amore | T_ERA_D_FMT 6766b5e5868SGarrett D'Amore | T_D_T_FMT 6776b5e5868SGarrett D'Amore | T_D_FMT 6786b5e5868SGarrett D'Amore | T_T_FMT 6796b5e5868SGarrett D'Amore | T_T_FMT_AMPM 6806b5e5868SGarrett D'Amore | T_DATE_FMT 6816b5e5868SGarrett D'Amore ; 6826b5e5868SGarrett D'Amore 6836b5e5868SGarrett D'Amore time_list : time_list T_SEMI string 6846b5e5868SGarrett D'Amore { 6856b5e5868SGarrett D'Amore add_time_list(get_wcs()); 6866b5e5868SGarrett D'Amore } 6876b5e5868SGarrett D'Amore | string 6886b5e5868SGarrett D'Amore { 6896b5e5868SGarrett D'Amore reset_time_list(); 6906b5e5868SGarrett D'Amore add_time_list(get_wcs()); 6916b5e5868SGarrett D'Amore } 6926b5e5868SGarrett D'Amore ; 693