xref: /illumos-gate/usr/src/cmd/iconv/parser.y (revision 48edc7cf)
1*48edc7cfSGordon Ross %{
2*48edc7cfSGordon Ross /*
3*48edc7cfSGordon Ross  * This file and its contents are supplied under the terms of the
4*48edc7cfSGordon Ross  * Common Development and Distribution License ("CDDL"), version 1.0.
5*48edc7cfSGordon Ross  * You may only use this file in accordance with the terms of version
6*48edc7cfSGordon Ross  * 1.0 of the CDDL.
7*48edc7cfSGordon Ross  *
8*48edc7cfSGordon Ross  * A full copy of the text of the CDDL should have accompanied this
9*48edc7cfSGordon Ross  * source.  A copy of the CDDL is also available via the Internet at
10*48edc7cfSGordon Ross  * http://www.illumos.org/license/CDDL.
11*48edc7cfSGordon Ross  */
12*48edc7cfSGordon Ross 
13*48edc7cfSGordon Ross /*
14*48edc7cfSGordon Ross  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
15*48edc7cfSGordon Ross  */
16*48edc7cfSGordon Ross 
17*48edc7cfSGordon Ross /*
18*48edc7cfSGordon Ross  * POSIX iconv charmap grammar.
19*48edc7cfSGordon Ross  */
20*48edc7cfSGordon Ross 
21*48edc7cfSGordon Ross #include <wchar.h>
22*48edc7cfSGordon Ross #include <stdio.h>
23*48edc7cfSGordon Ross #include <limits.h>
24*48edc7cfSGordon Ross #include "charmap.h"
25*48edc7cfSGordon Ross 
26*48edc7cfSGordon Ross %}
27*48edc7cfSGordon Ross %union {
28*48edc7cfSGordon Ross 	char		*token;
29*48edc7cfSGordon Ross 	int		num;
30*48edc7cfSGordon Ross 	char		mbs[MB_LEN_MAX + 2]; /* NB: [0] is length! */
31*48edc7cfSGordon Ross }
32*48edc7cfSGordon Ross 
33*48edc7cfSGordon Ross %token		T_CODE_SET
34*48edc7cfSGordon Ross %token		T_MB_CUR_MAX
35*48edc7cfSGordon Ross %token		T_MB_CUR_MIN
36*48edc7cfSGordon Ross %token		T_COM_CHAR
37*48edc7cfSGordon Ross %token		T_ESC_CHAR
38*48edc7cfSGordon Ross %token		T_LT
39*48edc7cfSGordon Ross %token		T_GT
40*48edc7cfSGordon Ross %token		T_NL
41*48edc7cfSGordon Ross %token		T_SEMI
42*48edc7cfSGordon Ross %token		T_COMMA
43*48edc7cfSGordon Ross %token		T_ELLIPSIS
44*48edc7cfSGordon Ross %token		T_RPAREN
45*48edc7cfSGordon Ross %token		T_LPAREN
46*48edc7cfSGordon Ross %token		T_QUOTE
47*48edc7cfSGordon Ross %token		T_NULL
48*48edc7cfSGordon Ross %token		T_END
49*48edc7cfSGordon Ross %token		T_CHARMAP
50*48edc7cfSGordon Ross %token		T_WIDTH
51*48edc7cfSGordon Ross %token		T_WIDTH_DEFAULT
52*48edc7cfSGordon Ross %token	<mbs>		T_CHAR
53*48edc7cfSGordon Ross %token	<token>		T_NAME
54*48edc7cfSGordon Ross %token	<num>		T_NUMBER
55*48edc7cfSGordon Ross %token	<token>		T_SYMBOL
56*48edc7cfSGordon Ross 
57*48edc7cfSGordon Ross %%
58*48edc7cfSGordon Ross 
59*48edc7cfSGordon Ross goal		: setting_list charmap
60*48edc7cfSGordon Ross 		| charmap
61*48edc7cfSGordon Ross 		;
62*48edc7cfSGordon Ross 
63*48edc7cfSGordon Ross string		: T_QUOTE charlist T_QUOTE
64*48edc7cfSGordon Ross 		| T_QUOTE T_QUOTE
65*48edc7cfSGordon Ross 		;
66*48edc7cfSGordon Ross 
67*48edc7cfSGordon Ross charlist	: charlist T_CHAR
68*48edc7cfSGordon Ross 		| T_CHAR
69*48edc7cfSGordon Ross 		;
70*48edc7cfSGordon Ross 
71*48edc7cfSGordon Ross setting_list	: setting_list setting
72*48edc7cfSGordon Ross 		| setting
73*48edc7cfSGordon Ross 		;
74*48edc7cfSGordon Ross 
75*48edc7cfSGordon Ross setting		: T_COM_CHAR T_CHAR T_NL
76*48edc7cfSGordon Ross 		{
77*48edc7cfSGordon Ross 			com_char = $2[1];
78*48edc7cfSGordon Ross 		}
79*48edc7cfSGordon Ross 		| T_ESC_CHAR T_CHAR T_NL
80*48edc7cfSGordon Ross 		{
81*48edc7cfSGordon Ross 			esc_char = $2[1];
82*48edc7cfSGordon Ross 		}
83*48edc7cfSGordon Ross 		| T_MB_CUR_MAX T_NUMBER T_NL
84*48edc7cfSGordon Ross 		{
85*48edc7cfSGordon Ross 			mb_cur_max = $2;
86*48edc7cfSGordon Ross 		}
87*48edc7cfSGordon Ross 		| T_MB_CUR_MIN T_NUMBER T_NL
88*48edc7cfSGordon Ross 		{
89*48edc7cfSGordon Ross 			mb_cur_min = $2;
90*48edc7cfSGordon Ross 		}
91*48edc7cfSGordon Ross 		| T_CODE_SET T_NAME T_NL
92*48edc7cfSGordon Ross 		{
93*48edc7cfSGordon Ross 			/* ignore */
94*48edc7cfSGordon Ross 		}
95*48edc7cfSGordon Ross 		| T_CODE_SET string T_NL
96*48edc7cfSGordon Ross 		{
97*48edc7cfSGordon Ross 			/* ignore */
98*48edc7cfSGordon Ross 		}
99*48edc7cfSGordon Ross 		;
100*48edc7cfSGordon Ross 
101*48edc7cfSGordon Ross charmap		: T_CHARMAP T_NL charmap_list T_END T_CHARMAP T_NL
102*48edc7cfSGordon Ross 
103*48edc7cfSGordon Ross charmap_list	: charmap_list charmap_entry
104*48edc7cfSGordon Ross 		| charmap_entry
105*48edc7cfSGordon Ross 		;
106*48edc7cfSGordon Ross 
107*48edc7cfSGordon Ross charmap_entry	: T_SYMBOL T_CHAR
108*48edc7cfSGordon Ross 		{
109*48edc7cfSGordon Ross 			add_charmap($1, $2);
110*48edc7cfSGordon Ross 			scan_to_eol();
111*48edc7cfSGordon Ross 		}
112*48edc7cfSGordon Ross 		| T_SYMBOL T_ELLIPSIS T_SYMBOL T_CHAR
113*48edc7cfSGordon Ross 		{
114*48edc7cfSGordon Ross 			add_charmap_range($1, $3, $4);
115*48edc7cfSGordon Ross 			scan_to_eol();
116*48edc7cfSGordon Ross 		}
117*48edc7cfSGordon Ross 		| T_NL
118*48edc7cfSGordon Ross 		;
119