148edc7cfSGordon Ross %{ 248edc7cfSGordon Ross /* 348edc7cfSGordon Ross * This file and its contents are supplied under the terms of the 448edc7cfSGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0. 548edc7cfSGordon Ross * You may only use this file in accordance with the terms of version 648edc7cfSGordon Ross * 1.0 of the CDDL. 748edc7cfSGordon Ross * 848edc7cfSGordon Ross * A full copy of the text of the CDDL should have accompanied this 948edc7cfSGordon Ross * source. A copy of the CDDL is also available via the Internet at 1048edc7cfSGordon Ross * http://www.illumos.org/license/CDDL. 1148edc7cfSGordon Ross */ 1248edc7cfSGordon Ross 1348edc7cfSGordon Ross /* 1448edc7cfSGordon Ross * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 1548edc7cfSGordon Ross */ 1648edc7cfSGordon Ross 1748edc7cfSGordon Ross /* 1848edc7cfSGordon Ross * POSIX iconv charmap grammar. 1948edc7cfSGordon Ross */ 2048edc7cfSGordon Ross 2148edc7cfSGordon Ross #include <wchar.h> 2248edc7cfSGordon Ross #include <stdio.h> 2348edc7cfSGordon Ross #include <limits.h> 2448edc7cfSGordon Ross #include "charmap.h" 2548edc7cfSGordon Ross 26*1a90c98dSToomas Soome extern int yylex(void); 27*1a90c98dSToomas Soome 2848edc7cfSGordon Ross %} 2948edc7cfSGordon Ross %union { 3048edc7cfSGordon Ross char *token; 3148edc7cfSGordon Ross int num; 3248edc7cfSGordon Ross char mbs[MB_LEN_MAX + 2]; /* NB: [0] is length! */ 3348edc7cfSGordon Ross } 3448edc7cfSGordon Ross 3548edc7cfSGordon Ross %token T_CODE_SET 3648edc7cfSGordon Ross %token T_MB_CUR_MAX 3748edc7cfSGordon Ross %token T_MB_CUR_MIN 3848edc7cfSGordon Ross %token T_COM_CHAR 3948edc7cfSGordon Ross %token T_ESC_CHAR 4048edc7cfSGordon Ross %token T_LT 4148edc7cfSGordon Ross %token T_GT 4248edc7cfSGordon Ross %token T_NL 4348edc7cfSGordon Ross %token T_SEMI 4448edc7cfSGordon Ross %token T_COMMA 4548edc7cfSGordon Ross %token T_ELLIPSIS 4648edc7cfSGordon Ross %token T_RPAREN 4748edc7cfSGordon Ross %token T_LPAREN 4848edc7cfSGordon Ross %token T_QUOTE 4948edc7cfSGordon Ross %token T_NULL 5048edc7cfSGordon Ross %token T_END 5148edc7cfSGordon Ross %token T_CHARMAP 5248edc7cfSGordon Ross %token T_WIDTH 5348edc7cfSGordon Ross %token T_WIDTH_DEFAULT 5448edc7cfSGordon Ross %token <mbs> T_CHAR 5548edc7cfSGordon Ross %token <token> T_NAME 5648edc7cfSGordon Ross %token <num> T_NUMBER 5748edc7cfSGordon Ross %token <token> T_SYMBOL 5848edc7cfSGordon Ross 5948edc7cfSGordon Ross %% 6048edc7cfSGordon Ross 6148edc7cfSGordon Ross goal : setting_list charmap 6248edc7cfSGordon Ross | charmap 6348edc7cfSGordon Ross ; 6448edc7cfSGordon Ross 6548edc7cfSGordon Ross string : T_QUOTE charlist T_QUOTE 6648edc7cfSGordon Ross | T_QUOTE T_QUOTE 6748edc7cfSGordon Ross ; 6848edc7cfSGordon Ross 6948edc7cfSGordon Ross charlist : charlist T_CHAR 7048edc7cfSGordon Ross | T_CHAR 7148edc7cfSGordon Ross ; 7248edc7cfSGordon Ross 7348edc7cfSGordon Ross setting_list : setting_list setting 7448edc7cfSGordon Ross | setting 7548edc7cfSGordon Ross ; 7648edc7cfSGordon Ross 7748edc7cfSGordon Ross setting : T_COM_CHAR T_CHAR T_NL 7848edc7cfSGordon Ross { 7948edc7cfSGordon Ross com_char = $2[1]; 8048edc7cfSGordon Ross } 8148edc7cfSGordon Ross | T_ESC_CHAR T_CHAR T_NL 8248edc7cfSGordon Ross { 8348edc7cfSGordon Ross esc_char = $2[1]; 8448edc7cfSGordon Ross } 8548edc7cfSGordon Ross | T_MB_CUR_MAX T_NUMBER T_NL 8648edc7cfSGordon Ross { 8748edc7cfSGordon Ross mb_cur_max = $2; 8848edc7cfSGordon Ross } 8948edc7cfSGordon Ross | T_MB_CUR_MIN T_NUMBER T_NL 9048edc7cfSGordon Ross { 9148edc7cfSGordon Ross mb_cur_min = $2; 9248edc7cfSGordon Ross } 9348edc7cfSGordon Ross | T_CODE_SET T_NAME T_NL 9448edc7cfSGordon Ross { 9548edc7cfSGordon Ross /* ignore */ 9648edc7cfSGordon Ross } 9748edc7cfSGordon Ross | T_CODE_SET string T_NL 9848edc7cfSGordon Ross { 9948edc7cfSGordon Ross /* ignore */ 10048edc7cfSGordon Ross } 10148edc7cfSGordon Ross ; 10248edc7cfSGordon Ross 10348edc7cfSGordon Ross charmap : T_CHARMAP T_NL charmap_list T_END T_CHARMAP T_NL 10448edc7cfSGordon Ross 10548edc7cfSGordon Ross charmap_list : charmap_list charmap_entry 10648edc7cfSGordon Ross | charmap_entry 10748edc7cfSGordon Ross ; 10848edc7cfSGordon Ross 10948edc7cfSGordon Ross charmap_entry : T_SYMBOL T_CHAR 11048edc7cfSGordon Ross { 11148edc7cfSGordon Ross add_charmap($1, $2); 11248edc7cfSGordon Ross scan_to_eol(); 11348edc7cfSGordon Ross } 11448edc7cfSGordon Ross | T_SYMBOL T_ELLIPSIS T_SYMBOL T_CHAR 11548edc7cfSGordon Ross { 11648edc7cfSGordon Ross add_charmap_range($1, $3, $4); 11748edc7cfSGordon Ross scan_to_eol(); 11848edc7cfSGordon Ross } 11948edc7cfSGordon Ross | T_NL 12048edc7cfSGordon Ross ; 121