1 %{ 2 /* 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 6 * 1.0 of the CDDL. 7 * 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. 11 */ 12 13 /* 14 * Copyright 2010 Nexenta Systems, Inc. All rights reserved. 15 */ 16 17 /* 18 * POSIX charmap grammar. 19 */ 20 21 #include <wchar.h> 22 #include <stdio.h> 23 #include <limits.h> 24 #include "iconv.h" 25 26 %} 27 %union { 28 int num; 29 wchar_t wc; 30 char *token; 31 } 32 33 %token T_CODE_SET 34 %token T_MB_CUR_MAX 35 %token T_MB_CUR_MIN 36 %token T_COM_CHAR 37 %token T_ESC_CHAR 38 %token T_LT 39 %token T_GT 40 %token T_NL 41 %token T_SEMI 42 %token T_COMMA 43 %token T_ELLIPSIS 44 %token T_RPAREN 45 %token T_LPAREN 46 %token T_QUOTE 47 %token T_NULL 48 %token T_WS 49 %token T_END 50 %token T_COPY 51 %token T_CHARMAP 52 %token T_WIDTH 53 %token T_WIDTH_DEFAULT 54 %token <wc> T_CHAR 55 %token <token> T_NAME 56 %token <num> T_NUMBER 57 %token <token> T_SYMBOL 58 59 %% 60 61 iconv : setting_list categories 62 | categories 63 ; 64 65 66 setting_list : setting_list setting 67 | setting 68 ; 69 70 setting : T_COM_CHAR T_CHAR T_NL 71 { 72 printf("SEtting comment\n"); 73 com_char = $2; 74 } 75 | T_ESC_CHAR T_CHAR T_NL 76 { 77 esc_char = $2; 78 } 79 | T_MB_CUR_MAX T_NUMBER T_NL 80 { 81 mb_cur_max = $2; 82 } 83 | T_MB_CUR_MIN T_NUMBER T_NL 84 { 85 mb_cur_min = $2; 86 } 87 | T_CODE_SET string T_NL 88 { 89 wchar_t *w = get_wcs(); 90 91 set_wide_encoding(to_mb_string(w)); 92 free(w); 93 } 94 | T_CODE_SET T_NAME T_NL 95 { 96 set_wide_encoding($2); 97 } 98 ; 99 100 categories : categories category 101 | category 102 ; 103 104 category : charmap 105 | width 106 ; 107 108 charmap : T_CHARMAP T_NL charmap_list T_END T_CHARMAP T_NL 109 110 charmap_list : charmap_list charmap_entry 111 | charmap_entry 112 ; 113 114 charmap_entry : T_SYMBOL T_CHAR 115 { 116 add_charmap($1, $2); 117 scan_to_eol(); 118 } 119 | T_SYMBOL T_ELLIPSIS T_SYMBOL T_CHAR 120 { 121 add_charmap_range($1, $3, $4); 122 scan_to_eol(); 123 } 124 | T_NL 125 ; 126 127 width : T_WIDTH T_NL width_list T_END T_WIDTH T_NL 128 129 width_list : width_list width_entry 130 | width_entry 131 ; 132 133 width_entry : T_SYMBOL T_NUMBER 134 { 135 printf("WIDTH ENTRY\n"); 136 } 137 | T_SYMBOL T_ELLIPSIS T_SYMBOL T_NUMBER 138 { 139 printf("WIDTH ENTY ELL\n"); 140 } 141 | T_NL 142 ; 143 144 string : T_QUOTE charlist T_QUOTE 145 | T_QUOTE T_QUOTE 146 ; 147 148 charlist : charlist T_CHAR 149 { 150 add_wcs($2); 151 } 152 | T_CHAR 153 { 154 add_wcs($1); 155 } 156 ;