Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
Main Page
Related Pages
Topics
Namespaces
Data Structures
Files
File List
Globals
EXTERNAL_HEADERS
RSL
util
scanner.h
Go to the documentation of this file.
1
29
#ifndef RWSTD_UTIL_SCANNER_H_INCLUDED
30
#define RWSTD_UTIL_SCANNER_H_INCLUDED
31
32
#include <string>
33
#include <stack>
34
#include <climits>
// for ULONG_MAX
35
36
37
struct
ScannerContext
;
38
39
40
class
Scanner
41
{
42
public
:
43
44
// enumeration of all tokens in the character map
45
// and locale definition file
46
enum
token_id
{
47
tok_code_set_name
,
// <code_set_name>
48
tok_mb_cur_max
,
// <mb_cur_max>
49
tok_mb_cur_min
,
// <mb_cur_min>
50
// sections
51
tok_charmap
,
// beginning of CHARMAP section
52
tok_collate
,
// beginning of LC_COLLATE section
53
tok_ctype
,
// beginning of LC_CTYPE section
54
tok_messages
,
// beginning of LC_MESSAGES section
55
tok_monetary
,
// beginning of LC_MONETARY section
56
tok_numeric
,
// beginning of LC_NUMERIC section
57
tok_time
,
// beginning of LC_TIME section
58
// ISO/IEC TR 14652 extensions:
59
tok_addr
,
// beginning of LC_ADDRESS section
60
tok_ident
,
// beginning of LC_IDENTIFICATION section
61
tok_measure
,
// beginning of LC_MEASUREMENT section
62
tok_name
,
// beginning of LC_NAME section
63
tok_paper
,
// beginning of LC_PAPER section
64
tok_phone
,
// beginning of LC_TELEPHONE section
65
//
66
tok_end
,
// END of a section
67
// LC_CTYPE-specific tokens
68
tok_upper
,
// upper section of LC_CTYPE
69
tok_lower
,
// lower section of LC_CTYPE
70
tok_digit
,
// digit section of LC_CTYPE
71
tok_space
,
// space section of LC_CTYPE
72
tok_alpha
,
// alpha section of LC_CTYPE
73
tok_graph
,
// graph section of LC_CTYPE
74
tok_print
,
// print section of LC_CTYPE
75
tok_cntrl
,
// cntrl section of LC_CTYPE
76
tok_punct
,
// punct section of LC_CTYPE
77
tok_xdigit
,
// xdigit section of LC_CTYPE
78
tok_blank
,
// blank section of LC_CTYPE
79
tok_tolower
,
// tolower section of LC_CTYPE
80
tok_toupper
,
// toupper section of LC_CTYPE
81
// LC_COLLATE-specific tokens
82
tok_script
,
83
tok_coll_elem
,
// collating-element
84
tok_coll_sym
,
// collating symbol
85
tok_from
,
86
tok_xlit_start
,
// translit_start
87
tok_xlit_end
,
// translit_end
88
tok_reorder
,
89
tok_reorder_end
,
90
tok_reorder_section
,
91
tok_reorder_section_end
,
92
tok_order_start
,
93
tok_order_end
,
94
tok_forward
,
95
tok_backward
,
96
tok_position
,
97
tok_undefined
,
98
//
99
tok_string
,
100
tok_ignore
,
101
// absolute, hexadecimal, decimal, and double-increment
102
// ellipses (see ISO/IEC TR 14652)
103
tok_abs_ellipsis
,
// "..."
104
tok_hex_ellipsis
,
// ".."
105
tok_dec_ellipsis
,
// "...."
106
tok_dbl_ellipsis
,
// "..(N).."
107
tok_width
,
108
// LC_MONETARY-specific tokens
109
tok_int_curr_symbol
,
110
tok_currency_symbol
,
111
tok_mon_decimal_point
,
112
tok_mon_thousands_sep
,
113
tok_mon_grouping
,
114
tok_positive_sign
,
115
tok_negative_sign
,
116
tok_int_frac_digits
,
117
tok_frac_digits
,
118
tok_p_cs_precedes
,
119
tok_p_sep_by_space
,
120
tok_n_cs_precedes
,
121
tok_n_sep_by_space
,
122
tok_p_sign_posn
,
123
tok_n_sign_posn
,
124
tok_int_p_cs_precedes
,
125
tok_int_n_cs_precedes
,
126
tok_int_p_sep_by_space
,
127
tok_int_n_sep_by_space
,
128
tok_int_p_sign_posn
,
129
tok_int_n_sign_posn
,
130
// LC_NUMERIC-specific tokens
131
tok_decimal_point
,
// decimal point
132
tok_thousands_sep
,
// thousands_sep
133
tok_grouping
,
// grouping
134
tok_truename
,
// truename (C++ extension)
135
tok_falsename
,
// falsename (C++ extension)
136
// LC_TIME-specific tokens
137
tok_abday
,
138
tok_day
,
139
tok_abmon
,
140
tok_mon
,
141
tok_d_t_fmt
,
142
tok_d_fmt
,
143
tok_t_fmt
,
144
tok_am_pm
,
145
tok_t_fmt_ampm
,
146
tok_era
,
147
tok_era_d_fmt
,
148
tok_era_t_fmt
,
149
tok_era_d_t_fmt
,
150
tok_alt_digits
,
151
// LC_MESSAGES-specific tokens
152
tok_yesexpr
,
153
tok_noexpr
,
154
// LC_ADDRESS-specific tokens
155
// LC_IDENTIFICATION-specific tokens
156
// LC_MEASUREMENT-specific tokens
157
// LC_NAME-specific tokens
158
// LC_PAPER-specific tokens
159
// LC_TELEPHONE-specific tokens
160
// other:
161
tok_sym_name
,
// symbolic character name
162
tok_char_value
,
// character value (octal, decimal, or hex)
163
tok_comment
,
// comment
164
tok_comment_char
,
// <comment_char>
165
tok_escape_char
,
// <escape_char>
166
tok_copy
,
// copy directive
167
tok_include
,
// include directive
168
tok_nl
,
// newline
169
tok_ndef
,
// unknown/undefined token
170
tok_end_tokens
// end of input
171
};
172
173
// scanner states
174
// enum {valid, invalid};
175
176
// a structure that represents a token
177
struct
token_t
{
178
std::string
name
;
179
token_id
token
;
180
181
// file position
182
int
line
;
183
int
column
;
184
185
// file name pointer
186
const
char
*
file
;
187
};
188
189
// realization
190
Scanner
();
191
virtual
~Scanner
();
192
193
// public interface
194
token_t
next_token
();
195
196
void
open
(std::string,
char
=
'#'
,
char
=
'\\'
);
197
198
void
close
();
199
200
char
escape_char
()
const
;
201
202
void
ignore_line
();
203
204
// converts an octal, decimal, or hexadecimal escape sequence
205
// (or a multibyte sequence of such things) to a numeric value
206
unsigned
long
207
convert_escape
(
const
char
*,
const
char
** = 0,
bool
=
false
)
const
;
208
209
private
:
210
211
Scanner
(
const
Scanner
&);
// not defined
212
void
operator= (
const
Scanner
&);
// not defined
213
214
// helper function that identifies a token from a string and
215
// returns a new token_t object
216
token_id
process_token (
const
char
*
name
);
217
218
// read a line from stream
219
void
read_line ();
220
221
// current file context and stack of context objects
222
ScannerContext
* context_;
223
std::stack<ScannerContext*> context_stack_;
224
225
unsigned
nlines_;
// number of lines read
226
unsigned
ntokens_;
// number of tokens read
227
228
// was the last token an escaped newline
229
bool
escaped_newline_;
230
};
231
232
233
#endif
// RWSTD_UTIL_SCANNER_H_INCLUDED
open
#define open(f, m)
Definition
22.locale.messages.cpp:63
Scanner
Definition
scanner.h:41
Scanner::~Scanner
virtual ~Scanner()
Definition
scanner.cpp:116
Scanner::escape_char
char escape_char() const
Definition
scanner.cpp:129
Scanner::close
void close()
Definition
scanner.cpp:169
Scanner::ignore_line
void ignore_line()
Definition
scanner.cpp:135
Scanner::convert_escape
unsigned long convert_escape(const char *, const char **=0, bool=false) const
Definition
scanner.cpp:705
Scanner::next_token
token_t next_token()
Definition
scanner.cpp:352
Scanner::token_id
token_id
Definition
scanner.h:46
Scanner::tok_punct
@ tok_punct
Definition
scanner.h:76
Scanner::tok_addr
@ tok_addr
Definition
scanner.h:59
Scanner::tok_cntrl
@ tok_cntrl
Definition
scanner.h:75
Scanner::tok_mon_thousands_sep
@ tok_mon_thousands_sep
Definition
scanner.h:112
Scanner::tok_backward
@ tok_backward
Definition
scanner.h:95
Scanner::tok_int_n_sign_posn
@ tok_int_n_sign_posn
Definition
scanner.h:129
Scanner::tok_int_frac_digits
@ tok_int_frac_digits
Definition
scanner.h:116
Scanner::tok_d_t_fmt
@ tok_d_t_fmt
Definition
scanner.h:141
Scanner::tok_tolower
@ tok_tolower
Definition
scanner.h:79
Scanner::tok_thousands_sep
@ tok_thousands_sep
Definition
scanner.h:132
Scanner::tok_end
@ tok_end
Definition
scanner.h:66
Scanner::tok_decimal_point
@ tok_decimal_point
Definition
scanner.h:131
Scanner::tok_upper
@ tok_upper
Definition
scanner.h:68
Scanner::tok_numeric
@ tok_numeric
Definition
scanner.h:56
Scanner::tok_int_p_sep_by_space
@ tok_int_p_sep_by_space
Definition
scanner.h:126
Scanner::tok_abday
@ tok_abday
Definition
scanner.h:137
Scanner::tok_script
@ tok_script
Definition
scanner.h:82
Scanner::tok_int_n_sep_by_space
@ tok_int_n_sep_by_space
Definition
scanner.h:127
Scanner::tok_era_t_fmt
@ tok_era_t_fmt
Definition
scanner.h:148
Scanner::tok_n_sep_by_space
@ tok_n_sep_by_space
Definition
scanner.h:121
Scanner::tok_n_cs_precedes
@ tok_n_cs_precedes
Definition
scanner.h:120
Scanner::tok_reorder_section_end
@ tok_reorder_section_end
Definition
scanner.h:91
Scanner::tok_comment_char
@ tok_comment_char
Definition
scanner.h:164
Scanner::tok_am_pm
@ tok_am_pm
Definition
scanner.h:144
Scanner::tok_p_sep_by_space
@ tok_p_sep_by_space
Definition
scanner.h:119
Scanner::tok_sym_name
@ tok_sym_name
Definition
scanner.h:161
Scanner::tok_era
@ tok_era
Definition
scanner.h:146
Scanner::tok_blank
@ tok_blank
Definition
scanner.h:78
Scanner::tok_escape_char
@ tok_escape_char
Definition
scanner.h:165
Scanner::tok_lower
@ tok_lower
Definition
scanner.h:69
Scanner::tok_negative_sign
@ tok_negative_sign
Definition
scanner.h:115
Scanner::tok_mon
@ tok_mon
Definition
scanner.h:140
Scanner::tok_reorder_end
@ tok_reorder_end
Definition
scanner.h:89
Scanner::tok_paper
@ tok_paper
Definition
scanner.h:63
Scanner::tok_int_n_cs_precedes
@ tok_int_n_cs_precedes
Definition
scanner.h:125
Scanner::tok_xdigit
@ tok_xdigit
Definition
scanner.h:77
Scanner::tok_include
@ tok_include
Definition
scanner.h:167
Scanner::tok_t_fmt
@ tok_t_fmt
Definition
scanner.h:143
Scanner::tok_comment
@ tok_comment
Definition
scanner.h:163
Scanner::tok_string
@ tok_string
Definition
scanner.h:99
Scanner::tok_era_d_fmt
@ tok_era_d_fmt
Definition
scanner.h:147
Scanner::tok_ignore
@ tok_ignore
Definition
scanner.h:100
Scanner::tok_xlit_start
@ tok_xlit_start
Definition
scanner.h:86
Scanner::tok_messages
@ tok_messages
Definition
scanner.h:54
Scanner::tok_space
@ tok_space
Definition
scanner.h:71
Scanner::tok_mb_cur_min
@ tok_mb_cur_min
Definition
scanner.h:49
Scanner::tok_frac_digits
@ tok_frac_digits
Definition
scanner.h:117
Scanner::tok_code_set_name
@ tok_code_set_name
Definition
scanner.h:47
Scanner::tok_coll_sym
@ tok_coll_sym
Definition
scanner.h:84
Scanner::tok_alt_digits
@ tok_alt_digits
Definition
scanner.h:150
Scanner::tok_truename
@ tok_truename
Definition
scanner.h:134
Scanner::tok_p_sign_posn
@ tok_p_sign_posn
Definition
scanner.h:122
Scanner::tok_forward
@ tok_forward
Definition
scanner.h:94
Scanner::tok_yesexpr
@ tok_yesexpr
Definition
scanner.h:152
Scanner::tok_ndef
@ tok_ndef
Definition
scanner.h:169
Scanner::tok_positive_sign
@ tok_positive_sign
Definition
scanner.h:114
Scanner::tok_day
@ tok_day
Definition
scanner.h:138
Scanner::tok_mon_grouping
@ tok_mon_grouping
Definition
scanner.h:113
Scanner::tok_undefined
@ tok_undefined
Definition
scanner.h:97
Scanner::tok_grouping
@ tok_grouping
Definition
scanner.h:133
Scanner::tok_phone
@ tok_phone
Definition
scanner.h:64
Scanner::tok_collate
@ tok_collate
Definition
scanner.h:52
Scanner::tok_print
@ tok_print
Definition
scanner.h:74
Scanner::tok_monetary
@ tok_monetary
Definition
scanner.h:55
Scanner::tok_digit
@ tok_digit
Definition
scanner.h:70
Scanner::tok_coll_elem
@ tok_coll_elem
Definition
scanner.h:83
Scanner::tok_mb_cur_max
@ tok_mb_cur_max
Definition
scanner.h:48
Scanner::tok_abmon
@ tok_abmon
Definition
scanner.h:139
Scanner::tok_reorder
@ tok_reorder
Definition
scanner.h:88
Scanner::tok_order_start
@ tok_order_start
Definition
scanner.h:92
Scanner::tok_ctype
@ tok_ctype
Definition
scanner.h:53
Scanner::tok_currency_symbol
@ tok_currency_symbol
Definition
scanner.h:110
Scanner::tok_copy
@ tok_copy
Definition
scanner.h:166
Scanner::tok_int_curr_symbol
@ tok_int_curr_symbol
Definition
scanner.h:109
Scanner::tok_time
@ tok_time
Definition
scanner.h:57
Scanner::tok_abs_ellipsis
@ tok_abs_ellipsis
Definition
scanner.h:103
Scanner::tok_nl
@ tok_nl
Definition
scanner.h:168
Scanner::tok_measure
@ tok_measure
Definition
scanner.h:61
Scanner::tok_falsename
@ tok_falsename
Definition
scanner.h:135
Scanner::tok_position
@ tok_position
Definition
scanner.h:96
Scanner::tok_reorder_section
@ tok_reorder_section
Definition
scanner.h:90
Scanner::tok_char_value
@ tok_char_value
Definition
scanner.h:162
Scanner::tok_toupper
@ tok_toupper
Definition
scanner.h:80
Scanner::tok_from
@ tok_from
Definition
scanner.h:85
Scanner::tok_alpha
@ tok_alpha
Definition
scanner.h:72
Scanner::tok_xlit_end
@ tok_xlit_end
Definition
scanner.h:87
Scanner::tok_n_sign_posn
@ tok_n_sign_posn
Definition
scanner.h:123
Scanner::tok_era_d_t_fmt
@ tok_era_d_t_fmt
Definition
scanner.h:149
Scanner::tok_order_end
@ tok_order_end
Definition
scanner.h:93
Scanner::tok_name
@ tok_name
Definition
scanner.h:62
Scanner::tok_int_p_sign_posn
@ tok_int_p_sign_posn
Definition
scanner.h:128
Scanner::tok_ident
@ tok_ident
Definition
scanner.h:60
Scanner::tok_end_tokens
@ tok_end_tokens
Definition
scanner.h:170
Scanner::tok_charmap
@ tok_charmap
Definition
scanner.h:51
Scanner::tok_noexpr
@ tok_noexpr
Definition
scanner.h:153
Scanner::tok_mon_decimal_point
@ tok_mon_decimal_point
Definition
scanner.h:111
Scanner::tok_t_fmt_ampm
@ tok_t_fmt_ampm
Definition
scanner.h:145
Scanner::tok_dec_ellipsis
@ tok_dec_ellipsis
Definition
scanner.h:105
Scanner::tok_graph
@ tok_graph
Definition
scanner.h:73
Scanner::tok_width
@ tok_width
Definition
scanner.h:107
Scanner::tok_p_cs_precedes
@ tok_p_cs_precedes
Definition
scanner.h:118
Scanner::tok_d_fmt
@ tok_d_fmt
Definition
scanner.h:142
Scanner::tok_dbl_ellipsis
@ tok_dbl_ellipsis
Definition
scanner.h:106
Scanner::tok_hex_ellipsis
@ tok_hex_ellipsis
Definition
scanner.h:104
Scanner::tok_int_p_cs_precedes
@ tok_int_p_cs_precedes
Definition
scanner.h:124
Scanner::Scanner
Scanner()
Definition
scanner.cpp:108
name
const char * name
Definition
codecvt1.cpp:72
ScannerContext
Definition
scanner.cpp:45
Scanner::token_t
Definition
scanner.h:177
Scanner::token_t::name
std::string name
Definition
scanner.h:178
Scanner::token_t::token
token_id token
Definition
scanner.h:179
Scanner::token_t::line
int line
Definition
scanner.h:182
Scanner::token_t::file
const char * file
Definition
scanner.h:186
Scanner::token_t::column
int column
Definition
scanner.h:183
Generated by
1.9.8