xref: /illumos-gate/usr/src/cmd/iconv/parser.y (revision 1a90c98d7539778aeb0a1d20f735b66aaba17fca)
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