1286432Sbapt%{ 2286432Sbapt/* 3286432Sbapt * Copyright 2010 Nexenta Systems, Inc. All rights reserved. 4286432Sbapt * Copyright 2015 John Marino <draco@marino.st> 5286432Sbapt * 6286432Sbapt * This source code is derived from the illumos localedef command, and 7286432Sbapt * provided under BSD-style license terms by Nexenta Systems, Inc. 8286432Sbapt * 9286432Sbapt * Redistribution and use in source and binary forms, with or without 10286432Sbapt * modification, are permitted provided that the following conditions 11286432Sbapt * are met: 12286432Sbapt * 13286432Sbapt * 1. Redistributions of source code must retain the above copyright 14286432Sbapt * notice, this list of conditions and the following disclaimer. 15286432Sbapt * 2. Redistributions in binary form must reproduce the above copyright 16286432Sbapt * notice, this list of conditions and the following disclaimer in the 17286432Sbapt * documentation and/or other materials provided with the distribution. 18286432Sbapt * 19286432Sbapt * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20286432Sbapt * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21286432Sbapt * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22286432Sbapt * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23286432Sbapt * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24286432Sbapt * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25286432Sbapt * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26286432Sbapt * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27286432Sbapt * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28286432Sbapt * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29286432Sbapt * POSSIBILITY OF SUCH DAMAGE. 30308330Sbapt * 31308330Sbapt * $FreeBSD: stable/11/usr.bin/localedef/parser.y 308330 2016-11-05 09:46:48Z bapt $ 32286432Sbapt */ 33286432Sbapt 34286432Sbapt/* 35286432Sbapt * POSIX localedef grammar. 36286432Sbapt */ 37286432Sbapt 38286432Sbapt#include <wchar.h> 39286432Sbapt#include <stdio.h> 40286432Sbapt#include <limits.h> 41286432Sbapt#include "localedef.h" 42286432Sbapt 43286432Sbapt%} 44286432Sbapt%union { 45286432Sbapt int num; 46286432Sbapt wchar_t wc; 47286432Sbapt char *token; 48286432Sbapt collsym_t *collsym; 49286432Sbapt collelem_t *collelem; 50286432Sbapt} 51286432Sbapt 52286432Sbapt%token T_CODE_SET 53286432Sbapt%token T_MB_CUR_MAX 54286432Sbapt%token T_MB_CUR_MIN 55286432Sbapt%token T_COM_CHAR 56286432Sbapt%token T_ESC_CHAR 57286432Sbapt%token T_LT 58286432Sbapt%token T_GT 59286432Sbapt%token T_NL 60286432Sbapt%token T_SEMI 61286432Sbapt%token T_COMMA 62286432Sbapt%token T_ELLIPSIS 63286432Sbapt%token T_RPAREN 64286432Sbapt%token T_LPAREN 65286432Sbapt%token T_QUOTE 66286432Sbapt%token T_NULL 67286432Sbapt%token T_WS 68286432Sbapt%token T_END 69286432Sbapt%token T_COPY 70286432Sbapt%token T_CHARMAP 71286432Sbapt%token T_WIDTH 72286432Sbapt%token T_CTYPE 73286432Sbapt%token T_ISUPPER 74286432Sbapt%token T_ISLOWER 75286432Sbapt%token T_ISALPHA 76286432Sbapt%token T_ISDIGIT 77286432Sbapt%token T_ISPUNCT 78286432Sbapt%token T_ISXDIGIT 79286432Sbapt%token T_ISSPACE 80286432Sbapt%token T_ISPRINT 81286432Sbapt%token T_ISGRAPH 82286432Sbapt%token T_ISBLANK 83286432Sbapt%token T_ISCNTRL 84286432Sbapt%token T_ISALNUM 85286432Sbapt%token T_ISSPECIAL 86286432Sbapt%token T_ISPHONOGRAM 87286432Sbapt%token T_ISIDEOGRAM 88286432Sbapt%token T_ISENGLISH 89286432Sbapt%token T_ISNUMBER 90286432Sbapt%token T_TOUPPER 91286432Sbapt%token T_TOLOWER 92286432Sbapt%token T_COLLATE 93286432Sbapt%token T_COLLATING_SYMBOL 94286432Sbapt%token T_COLLATING_ELEMENT 95286432Sbapt%token T_ORDER_START 96286432Sbapt%token T_ORDER_END 97286432Sbapt%token T_FORWARD 98286432Sbapt%token T_BACKWARD 99286432Sbapt%token T_POSITION 100286432Sbapt%token T_FROM 101286432Sbapt%token T_UNDEFINED 102286432Sbapt%token T_IGNORE 103286432Sbapt%token T_MESSAGES 104286432Sbapt%token T_YESSTR 105286432Sbapt%token T_NOSTR 106286432Sbapt%token T_YESEXPR 107286432Sbapt%token T_NOEXPR 108286432Sbapt%token T_MONETARY 109286432Sbapt%token T_INT_CURR_SYMBOL 110286432Sbapt%token T_CURRENCY_SYMBOL 111286432Sbapt%token T_MON_DECIMAL_POINT 112286432Sbapt%token T_MON_THOUSANDS_SEP 113286432Sbapt%token T_POSITIVE_SIGN 114286432Sbapt%token T_NEGATIVE_SIGN 115286432Sbapt%token T_MON_GROUPING 116286432Sbapt%token T_INT_FRAC_DIGITS 117286432Sbapt%token T_FRAC_DIGITS 118286432Sbapt%token T_P_CS_PRECEDES 119286432Sbapt%token T_P_SEP_BY_SPACE 120286432Sbapt%token T_N_CS_PRECEDES 121286432Sbapt%token T_N_SEP_BY_SPACE 122286432Sbapt%token T_P_SIGN_POSN 123286432Sbapt%token T_N_SIGN_POSN 124286432Sbapt%token T_INT_P_CS_PRECEDES 125286432Sbapt%token T_INT_N_CS_PRECEDES 126286432Sbapt%token T_INT_P_SEP_BY_SPACE 127286432Sbapt%token T_INT_N_SEP_BY_SPACE 128286432Sbapt%token T_INT_P_SIGN_POSN 129286432Sbapt%token T_INT_N_SIGN_POSN 130286432Sbapt%token T_NUMERIC 131286432Sbapt%token T_DECIMAL_POINT 132286432Sbapt%token T_THOUSANDS_SEP 133286432Sbapt%token T_GROUPING 134286432Sbapt%token T_TIME 135286432Sbapt%token T_ABDAY 136286432Sbapt%token T_DAY 137286432Sbapt%token T_ABMON 138286432Sbapt%token T_MON 139286432Sbapt%token T_ERA 140286432Sbapt%token T_ERA_D_FMT 141286432Sbapt%token T_ERA_T_FMT 142286432Sbapt%token T_ERA_D_T_FMT 143286432Sbapt%token T_ALT_DIGITS 144286432Sbapt%token T_D_T_FMT 145286432Sbapt%token T_D_FMT 146286432Sbapt%token T_T_FMT 147286432Sbapt%token T_AM_PM 148286432Sbapt%token T_T_FMT_AMPM 149286432Sbapt%token T_DATE_FMT 150286432Sbapt%token <wc> T_CHAR 151286432Sbapt%token <token> T_NAME 152286432Sbapt%token <num> T_NUMBER 153286432Sbapt%token <token> T_SYMBOL 154286432Sbapt%token <collsym> T_COLLSYM 155286432Sbapt%token <collelem> T_COLLELEM 156286432Sbapt 157286432Sbapt%% 158286432Sbapt 159286432Sbaptlocaledef : setting_list categories 160286432Sbapt | categories 161286432Sbapt ; 162286432Sbapt 163286432Sbaptstring : T_QUOTE charlist T_QUOTE 164286432Sbapt | T_QUOTE T_QUOTE 165286432Sbapt ; 166286432Sbapt 167286432Sbaptcharlist : charlist T_CHAR 168286432Sbapt { 169286432Sbapt add_wcs($2); 170286432Sbapt } 171286432Sbapt | T_CHAR 172286432Sbapt { 173286432Sbapt add_wcs($1); 174286432Sbapt } 175286432Sbapt ; 176286432Sbapt 177286432Sbaptsetting_list : setting_list setting 178286432Sbapt | setting 179286432Sbapt ; 180286432Sbapt 181286432Sbapt 182286432Sbaptsetting : T_COM_CHAR T_CHAR T_NL 183286432Sbapt { 184286432Sbapt com_char = $2; 185286432Sbapt } 186286432Sbapt | T_ESC_CHAR T_CHAR T_NL 187286432Sbapt { 188286432Sbapt esc_char = $2; 189286432Sbapt } 190286432Sbapt | T_MB_CUR_MAX T_NUMBER T_NL 191286432Sbapt { 192286432Sbapt mb_cur_max = $2; 193286432Sbapt } 194286432Sbapt | T_MB_CUR_MIN T_NUMBER T_NL 195286432Sbapt { 196286432Sbapt mb_cur_min = $2; 197286432Sbapt } 198286432Sbapt | T_CODE_SET string T_NL 199286432Sbapt { 200286432Sbapt wchar_t *w = get_wcs(); 201286432Sbapt set_wide_encoding(to_mb_string(w)); 202286432Sbapt free(w); 203286432Sbapt } 204286432Sbapt | T_CODE_SET T_NAME T_NL 205286432Sbapt { 206286432Sbapt set_wide_encoding($2); 207286432Sbapt } 208286432Sbapt ; 209286432Sbapt 210286432Sbaptcopycat : T_COPY T_NAME T_NL 211286432Sbapt { 212286432Sbapt copy_category($2); 213286432Sbapt } 214286432Sbapt | T_COPY string T_NL 215286432Sbapt { 216286432Sbapt wchar_t *w = get_wcs(); 217286432Sbapt copy_category(to_mb_string(w)); 218286432Sbapt free(w); 219286432Sbapt } 220286432Sbapt ; 221286432Sbapt 222286432Sbaptcategories : categories category 223286432Sbapt | category 224286432Sbapt ; 225286432Sbapt 226286432Sbapt 227286432Sbaptcategory : charmap 228286432Sbapt | messages 229286432Sbapt | monetary 230286432Sbapt | ctype 231286432Sbapt | collate 232286432Sbapt | numeric 233286432Sbapt | time 234286432Sbapt ; 235286432Sbapt 236286432Sbapt 237286432Sbaptcharmap : T_CHARMAP T_NL charmap_list T_END T_CHARMAP T_NL 238286432Sbapt | T_WIDTH T_NL width_list T_END T_WIDTH T_NL 239286432Sbapt ; 240286432Sbapt 241286432Sbapt 242286432Sbaptcharmap_list : charmap_list charmap_entry 243286432Sbapt | charmap_entry 244286432Sbapt ; 245286432Sbapt 246286432Sbapt 247286432Sbaptcharmap_entry : T_SYMBOL T_CHAR 248286432Sbapt { 249286432Sbapt add_charmap($1, $2); 250286432Sbapt scan_to_eol(); 251286432Sbapt } 252286432Sbapt | T_SYMBOL T_ELLIPSIS T_SYMBOL T_CHAR 253286432Sbapt { 254286432Sbapt add_charmap_range($1, $3, $4); 255286432Sbapt scan_to_eol(); 256286432Sbapt } 257286432Sbapt | T_NL 258286432Sbapt ; 259286432Sbapt 260286432Sbaptwidth_list : width_list width_entry 261286432Sbapt | width_entry 262286432Sbapt ; 263286432Sbapt 264286432Sbaptwidth_entry : T_CHAR T_NUMBER T_NL 265286432Sbapt { 266286432Sbapt add_width($1, $2); 267286432Sbapt } 268286432Sbapt | T_SYMBOL T_NUMBER T_NL 269286432Sbapt { 270286432Sbapt add_charmap_undefined($1); 271286432Sbapt } 272286432Sbapt | T_CHAR T_ELLIPSIS T_CHAR T_NUMBER T_NL 273286432Sbapt { 274286432Sbapt add_width_range($1, $3, $4); 275286432Sbapt } 276286432Sbapt | T_SYMBOL T_ELLIPSIS T_SYMBOL T_NUMBER T_NL 277286432Sbapt { 278286432Sbapt add_charmap_undefined($1); 279286432Sbapt add_charmap_undefined($3); 280286432Sbapt } 281286432Sbapt | T_CHAR T_ELLIPSIS T_SYMBOL T_NUMBER T_NL 282286432Sbapt { 283286432Sbapt add_width($1, $4); 284286432Sbapt add_charmap_undefined($3); 285286432Sbapt } 286286432Sbapt | T_SYMBOL T_ELLIPSIS T_CHAR T_NUMBER T_NL 287286432Sbapt { 288286432Sbapt add_width($3, $4); 289286432Sbapt add_charmap_undefined($1); 290286432Sbapt } 291286432Sbapt | T_NL 292286432Sbapt ; 293286432Sbapt 294286432Sbaptctype : T_CTYPE T_NL ctype_list T_END T_CTYPE T_NL 295286432Sbapt { 296286432Sbapt dump_ctype(); 297286432Sbapt } 298286432Sbapt | T_CTYPE T_NL copycat T_END T_CTYPE T_NL 299286432Sbapt ; 300286432Sbapt 301286432Sbaptctype_list : ctype_list ctype_kw 302286432Sbapt | ctype_kw 303286432Sbapt ; 304286432Sbapt 305286432Sbaptctype_kw : T_ISUPPER cc_list T_NL 306286432Sbapt | T_ISLOWER cc_list T_NL 307286432Sbapt | T_ISALPHA cc_list T_NL 308286432Sbapt | T_ISDIGIT cc_list T_NL 309286432Sbapt | T_ISPUNCT cc_list T_NL 310286432Sbapt | T_ISXDIGIT cc_list T_NL 311286432Sbapt | T_ISSPACE cc_list T_NL 312286432Sbapt | T_ISPRINT cc_list T_NL 313286432Sbapt | T_ISGRAPH cc_list T_NL 314286432Sbapt | T_ISBLANK cc_list T_NL 315286432Sbapt | T_ISCNTRL cc_list T_NL 316286432Sbapt | T_ISALNUM cc_list T_NL 317286432Sbapt | T_ISSPECIAL cc_list T_NL 318286432Sbapt | T_ISENGLISH cc_list T_NL 319286432Sbapt | T_ISNUMBER cc_list T_NL 320286432Sbapt | T_ISIDEOGRAM cc_list T_NL 321286432Sbapt | T_ISPHONOGRAM cc_list T_NL 322286432Sbapt | T_TOUPPER conv_list T_NL 323286432Sbapt | T_TOLOWER conv_list T_NL 324286432Sbapt ; 325286432Sbapt 326308330Sbaptcc_list : cc_list T_SEMI cc_range_end 327308330Sbapt | cc_list T_SEMI cc_char 328308330Sbapt | cc_char 329308330Sbapt ; 330286432Sbapt 331308330Sbaptcc_range_end : T_ELLIPSIS T_SEMI T_CHAR 332286432Sbapt { 333308330Sbapt add_ctype_range($3); 334286432Sbapt } 335308330Sbapt ; 336308330Sbapt 337308330Sbaptcc_char : T_CHAR 338286432Sbapt { 339286432Sbapt add_ctype($1); 340286432Sbapt } 341286432Sbapt | T_SYMBOL 342286432Sbapt { 343286432Sbapt add_charmap_undefined($1); 344286432Sbapt } 345286432Sbapt ; 346286432Sbapt 347286432Sbaptconv_list : conv_list T_SEMI conv_pair 348286432Sbapt | conv_pair 349286432Sbapt ; 350286432Sbapt 351286432Sbapt 352286432Sbaptconv_pair : T_LPAREN T_CHAR T_COMMA T_CHAR T_RPAREN 353286432Sbapt { 354286432Sbapt add_caseconv($2, $4); 355286432Sbapt } 356286432Sbapt | T_LPAREN T_SYMBOL T_COMMA T_CHAR T_RPAREN 357286432Sbapt { 358286432Sbapt add_charmap_undefined($2); 359286432Sbapt } 360286432Sbapt | T_LPAREN T_SYMBOL T_COMMA T_SYMBOL T_RPAREN 361286432Sbapt { 362286432Sbapt add_charmap_undefined($2); 363286432Sbapt add_charmap_undefined($4); 364286432Sbapt } 365286432Sbapt | T_LPAREN T_CHAR T_COMMA T_SYMBOL T_RPAREN 366286432Sbapt { 367286432Sbapt add_charmap_undefined($4); 368286432Sbapt } 369286432Sbapt ; 370286432Sbapt 371286432Sbaptcollate : T_COLLATE T_NL coll_order T_END T_COLLATE T_NL 372286432Sbapt { 373286432Sbapt dump_collate(); 374286432Sbapt } 375286432Sbapt | T_COLLATE T_NL coll_optional coll_order T_END T_COLLATE T_NL 376286432Sbapt { 377286432Sbapt dump_collate(); 378286432Sbapt } 379286432Sbapt | T_COLLATE T_NL copycat T_END T_COLLATE T_NL 380286432Sbapt ; 381286432Sbapt 382286432Sbapt 383286432Sbaptcoll_optional : coll_optional coll_symbols 384286432Sbapt | coll_optional coll_elements 385286432Sbapt | coll_symbols 386286432Sbapt | coll_elements 387286432Sbapt ; 388286432Sbapt 389286432Sbapt 390286432Sbaptcoll_symbols : T_COLLATING_SYMBOL T_SYMBOL T_NL 391286432Sbapt { 392286432Sbapt define_collsym($2); 393286432Sbapt } 394286432Sbapt ; 395286432Sbapt 396286432Sbapt 397286432Sbaptcoll_elements : T_COLLATING_ELEMENT T_SYMBOL T_FROM string T_NL 398286432Sbapt { 399286432Sbapt define_collelem($2, get_wcs()); 400286432Sbapt } 401286432Sbapt ; 402286432Sbapt 403286432Sbaptcoll_order : T_ORDER_START T_NL order_list T_ORDER_END T_NL 404286432Sbapt { 405286432Sbapt /* If no order list supplied default to one forward */ 406286432Sbapt add_order_bit(T_FORWARD); 407286432Sbapt add_order_directive(); 408286432Sbapt } 409286432Sbapt | T_ORDER_START order_args T_NL order_list T_ORDER_END T_NL 410286432Sbapt ; 411286432Sbapt 412286432Sbapt 413286432Sbaptorder_args : order_args T_SEMI order_arg 414286432Sbapt { 415286432Sbapt add_order_directive(); 416286432Sbapt } 417286432Sbapt | order_arg 418286432Sbapt { 419286432Sbapt add_order_directive(); 420286432Sbapt } 421286432Sbapt ; 422286432Sbapt 423286432Sbaptorder_arg : order_arg T_COMMA order_dir 424286432Sbapt | order_dir 425286432Sbapt ; 426286432Sbapt 427286432Sbaptorder_dir : T_FORWARD 428286432Sbapt { 429286432Sbapt add_order_bit(T_FORWARD); 430286432Sbapt } 431286432Sbapt | T_BACKWARD 432286432Sbapt { 433286432Sbapt add_order_bit(T_BACKWARD); 434286432Sbapt } 435286432Sbapt | T_POSITION 436286432Sbapt { 437286432Sbapt add_order_bit(T_POSITION); 438286432Sbapt } 439286432Sbapt ; 440286432Sbapt 441286432Sbaptorder_list : order_list order_item 442286432Sbapt | order_item 443286432Sbapt ; 444286432Sbapt 445286432Sbaptorder_item : T_COLLSYM T_NL 446286432Sbapt { 447286432Sbapt end_order_collsym($1); 448286432Sbapt } 449286432Sbapt | order_itemkw T_NL 450286432Sbapt { 451286432Sbapt end_order(); 452286432Sbapt } 453286432Sbapt | order_itemkw order_weights T_NL 454286432Sbapt { 455286432Sbapt end_order(); 456286432Sbapt } 457286432Sbapt ; 458286432Sbapt 459286432Sbaptorder_itemkw : T_CHAR 460286432Sbapt { 461286432Sbapt start_order_char($1); 462286432Sbapt } 463286432Sbapt | T_ELLIPSIS 464286432Sbapt { 465286432Sbapt start_order_ellipsis(); 466286432Sbapt } 467286432Sbapt | T_COLLELEM 468286432Sbapt { 469286432Sbapt start_order_collelem($1); 470286432Sbapt } 471286432Sbapt | T_UNDEFINED 472286432Sbapt { 473286432Sbapt start_order_undefined(); 474286432Sbapt } 475286432Sbapt | T_SYMBOL 476286432Sbapt { 477286432Sbapt start_order_symbol($1); 478286432Sbapt } 479286432Sbapt ; 480286432Sbapt 481286432Sbaptorder_weights : order_weights T_SEMI order_weight 482286432Sbapt | order_weights T_SEMI 483286432Sbapt | order_weight 484286432Sbapt ; 485286432Sbapt 486286432Sbaptorder_weight : T_COLLELEM 487286432Sbapt { 488286432Sbapt add_order_collelem($1); 489286432Sbapt } 490286432Sbapt | T_COLLSYM 491286432Sbapt { 492286432Sbapt add_order_collsym($1); 493286432Sbapt } 494286432Sbapt | T_CHAR 495286432Sbapt { 496286432Sbapt add_order_char($1); 497286432Sbapt } 498286432Sbapt | T_ELLIPSIS 499286432Sbapt { 500286432Sbapt add_order_ellipsis(); 501286432Sbapt } 502286432Sbapt | T_IGNORE 503286432Sbapt { 504286432Sbapt add_order_ignore(); 505286432Sbapt } 506286432Sbapt | T_SYMBOL 507286432Sbapt { 508286432Sbapt add_order_symbol($1); 509286432Sbapt } 510286432Sbapt | T_QUOTE order_str T_QUOTE 511286432Sbapt { 512286432Sbapt add_order_subst(); 513286432Sbapt } 514286432Sbapt ; 515286432Sbapt 516286432Sbaptorder_str : order_str order_stritem 517286432Sbapt | order_stritem 518286432Sbapt ; 519286432Sbapt 520286432Sbaptorder_stritem : T_CHAR 521286432Sbapt { 522286432Sbapt add_subst_char($1); 523286432Sbapt } 524286432Sbapt | T_COLLSYM 525286432Sbapt { 526286432Sbapt add_subst_collsym($1); 527286432Sbapt } 528286432Sbapt | T_COLLELEM 529286432Sbapt { 530286432Sbapt add_subst_collelem($1); 531286432Sbapt } 532286432Sbapt | T_SYMBOL 533286432Sbapt { 534286432Sbapt add_subst_symbol($1); 535286432Sbapt } 536286432Sbapt ; 537286432Sbapt 538286432Sbaptmessages : T_MESSAGES T_NL messages_list T_END T_MESSAGES T_NL 539286432Sbapt { 540286432Sbapt dump_messages(); 541286432Sbapt } 542286432Sbapt | T_MESSAGES T_NL copycat T_END T_MESSAGES T_NL 543286432Sbapt ; 544286432Sbapt 545286432Sbaptmessages_list : messages_list messages_item 546286432Sbapt | messages_item 547286432Sbapt ; 548286432Sbapt 549286432Sbaptmessages_kw : T_YESSTR 550286432Sbapt | T_NOSTR 551286432Sbapt | T_YESEXPR 552286432Sbapt | T_NOEXPR 553286432Sbapt ; 554286432Sbapt 555286432Sbaptmessages_item : messages_kw string T_NL 556286432Sbapt { 557286432Sbapt add_message(get_wcs()); 558286432Sbapt } 559286432Sbapt ; 560286432Sbapt 561286432Sbaptmonetary : T_MONETARY T_NL monetary_list T_END T_MONETARY T_NL 562286432Sbapt { 563286432Sbapt dump_monetary(); 564286432Sbapt } 565286432Sbapt | T_MONETARY T_NL copycat T_END T_MONETARY T_NL 566286432Sbapt ; 567286432Sbapt 568286432Sbaptmonetary_list : monetary_list monetary_kw 569286432Sbapt | monetary_kw 570286432Sbapt ; 571286432Sbapt 572286432Sbaptmonetary_strkw : T_INT_CURR_SYMBOL 573286432Sbapt | T_CURRENCY_SYMBOL 574286432Sbapt | T_MON_DECIMAL_POINT 575286432Sbapt | T_MON_THOUSANDS_SEP 576286432Sbapt | T_POSITIVE_SIGN 577286432Sbapt | T_NEGATIVE_SIGN 578286432Sbapt ; 579286432Sbapt 580286432Sbaptmonetary_numkw : T_INT_FRAC_DIGITS 581286432Sbapt | T_FRAC_DIGITS 582286432Sbapt | T_P_CS_PRECEDES 583286432Sbapt | T_P_SEP_BY_SPACE 584286432Sbapt | T_N_CS_PRECEDES 585286432Sbapt | T_N_SEP_BY_SPACE 586286432Sbapt | T_P_SIGN_POSN 587286432Sbapt | T_N_SIGN_POSN 588286432Sbapt | T_INT_P_CS_PRECEDES 589286432Sbapt | T_INT_N_CS_PRECEDES 590286432Sbapt | T_INT_P_SEP_BY_SPACE 591286432Sbapt | T_INT_N_SEP_BY_SPACE 592286432Sbapt | T_INT_P_SIGN_POSN 593286432Sbapt | T_INT_N_SIGN_POSN 594286432Sbapt ; 595286432Sbapt 596286432Sbaptmonetary_kw : monetary_strkw string T_NL 597286432Sbapt { 598286432Sbapt add_monetary_str(get_wcs()); 599286432Sbapt } 600286432Sbapt | monetary_numkw T_NUMBER T_NL 601286432Sbapt { 602286432Sbapt add_monetary_num($2); 603286432Sbapt } 604286432Sbapt | T_MON_GROUPING mon_group_list T_NL 605286432Sbapt ; 606286432Sbapt 607286432Sbaptmon_group_list : T_NUMBER 608286432Sbapt { 609286432Sbapt reset_monetary_group(); 610286432Sbapt add_monetary_group($1); 611286432Sbapt } 612286432Sbapt | mon_group_list T_SEMI T_NUMBER 613286432Sbapt { 614286432Sbapt add_monetary_group($3); 615286432Sbapt } 616286432Sbapt ; 617286432Sbapt 618286432Sbapt 619286432Sbaptnumeric : T_NUMERIC T_NL numeric_list T_END T_NUMERIC T_NL 620286432Sbapt { 621286432Sbapt dump_numeric(); 622286432Sbapt } 623286432Sbapt | T_NUMERIC T_NL copycat T_END T_NUMERIC T_NL 624286432Sbapt ; 625286432Sbapt 626286432Sbapt 627286432Sbaptnumeric_list : numeric_list numeric_item 628286432Sbapt | numeric_item 629286432Sbapt ; 630286432Sbapt 631286432Sbapt 632286432Sbaptnumeric_item : numeric_strkw string T_NL 633286432Sbapt { 634286432Sbapt add_numeric_str(get_wcs()); 635286432Sbapt } 636286432Sbapt | T_GROUPING group_list T_NL 637286432Sbapt ; 638286432Sbapt 639286432Sbaptnumeric_strkw : T_DECIMAL_POINT 640286432Sbapt | T_THOUSANDS_SEP 641286432Sbapt ; 642286432Sbapt 643286432Sbapt 644286432Sbaptgroup_list : T_NUMBER 645286432Sbapt { 646286432Sbapt reset_numeric_group(); 647286432Sbapt add_numeric_group($1); 648286432Sbapt } 649286432Sbapt | group_list T_SEMI T_NUMBER 650286432Sbapt { 651286432Sbapt add_numeric_group($3); 652286432Sbapt } 653286432Sbapt ; 654286432Sbapt 655286432Sbapt 656286432Sbapttime : T_TIME T_NL time_kwlist T_END T_TIME T_NL 657286432Sbapt { 658286432Sbapt dump_time(); 659286432Sbapt } 660286432Sbapt | T_TIME T_NL copycat T_END T_NUMERIC T_NL 661286432Sbapt ; 662286432Sbapt 663286432Sbapttime_kwlist : time_kwlist time_kw 664286432Sbapt | time_kw 665286432Sbapt ; 666286432Sbapt 667286432Sbapttime_kw : time_strkw string T_NL 668286432Sbapt { 669286432Sbapt add_time_str(get_wcs()); 670286432Sbapt } 671286432Sbapt | time_listkw time_list T_NL 672286432Sbapt { 673286432Sbapt check_time_list(); 674286432Sbapt } 675286432Sbapt ; 676286432Sbapt 677286432Sbapttime_listkw : T_ABDAY 678286432Sbapt | T_DAY 679286432Sbapt | T_ABMON 680286432Sbapt | T_MON 681286432Sbapt | T_ERA 682286432Sbapt | T_ALT_DIGITS 683286432Sbapt | T_AM_PM 684286432Sbapt ; 685286432Sbapt 686286432Sbapttime_strkw : T_ERA_D_T_FMT 687286432Sbapt | T_ERA_T_FMT 688286432Sbapt | T_ERA_D_FMT 689286432Sbapt | T_D_T_FMT 690286432Sbapt | T_D_FMT 691286432Sbapt | T_T_FMT 692286432Sbapt | T_T_FMT_AMPM 693286432Sbapt | T_DATE_FMT 694286432Sbapt ; 695286432Sbapt 696286432Sbapttime_list : time_list T_SEMI string 697286432Sbapt { 698286432Sbapt add_time_list(get_wcs()); 699286432Sbapt } 700286432Sbapt | string 701286432Sbapt { 702286432Sbapt reset_time_list(); 703286432Sbapt add_time_list(get_wcs()); 704286432Sbapt } 705286432Sbapt ; 706