29 #define TOK_STRING_VAL(TOK) ((TOK)->u.sval) |
29 #define TOK_STRING_VAL(TOK) ((TOK)->u.sval) |
30 #define TOK_IDENT_VAL(TOK) ((TOK)->u.sval) |
30 #define TOK_IDENT_VAL(TOK) ((TOK)->u.sval) |
31 #define TOK_COMMENT_VAL(TOK) ((TOK)->u.sval) |
31 #define TOK_COMMENT_VAL(TOK) ((TOK)->u.sval) |
32 #define TOK_OP_VAL(TOK) ((TOK)->u.opval) |
32 #define TOK_OP_VAL(TOK) ((TOK)->u.opval) |
33 |
33 |
|
34 #define TOK_IS_INVALID(TOK) ((TOK)->type==TOK_INVALID) |
34 #define TOK_IS_LONG(TOK) ((TOK)->type==TOK_LONG) |
35 #define TOK_IS_LONG(TOK) ((TOK)->type==TOK_LONG) |
35 #define TOK_IS_DOUBLE(TOK) ((TOK)->type==TOK_DOUBLE) |
36 #define TOK_IS_DOUBLE(TOK) ((TOK)->type==TOK_DOUBLE) |
36 #define TOK_IS_CHAR(TOK) ((TOK)->type==TOK_CHAR) |
37 #define TOK_IS_CHAR(TOK) ((TOK)->type==TOK_CHAR) |
37 #define TOK_IS_STRING(TOK) ((TOK)->type==TOK_STRING) |
38 #define TOK_IS_STRING(TOK) ((TOK)->type==TOK_STRING) |
38 #define TOK_IS_IDENT(TOK) ((TOK)->type==TOK_IDENT) |
39 #define TOK_IS_IDENT(TOK) ((TOK)->type==TOK_IDENT) |
116 |
117 |
117 |
118 |
118 enum{ |
119 enum{ |
119 TOKZ_IGNORE_NEXTLINE=0x1, |
120 TOKZ_IGNORE_NEXTLINE=0x1, |
120 TOKZ_READ_COMMENTS=0x2, |
121 TOKZ_READ_COMMENTS=0x2, |
121 TOKZ_PARSER_INDENT_MODE=0x4 |
122 TOKZ_PARSER_INDENT_MODE=0x04, |
|
123 TOKZ_ERROR_TOLERANT=0x8 |
122 }; |
124 }; |
123 |
125 |
124 |
126 |
125 enum{ |
127 enum{ |
126 E_TOKZ_UNEXPECTED_EOF=1, |
128 E_TOKZ_UNEXPECTED_EOF=1, |
140 E_TOKZ_INVALID_ARGUMENT, |
142 E_TOKZ_INVALID_ARGUMENT, |
141 E_TOKZ_EOS_EXPECTED, |
143 E_TOKZ_EOS_EXPECTED, |
142 E_TOKZ_TOO_FEW_ARGS, |
144 E_TOKZ_TOO_FEW_ARGS, |
143 E_TOKZ_TOO_MANY_ARGS, |
145 E_TOKZ_TOO_MANY_ARGS, |
144 E_TOKZ_MAX_NEST, |
146 E_TOKZ_MAX_NEST, |
145 E_TOKZ_UNEXPECTED_EOS, |
147 E_TOKZ_IDENTIFIER_EXPECTED, |
146 E_TOKZ_IDENTIFIER_EXPECTED |
148 |
|
149 E_TOKZ_LBRACE_EXPECTED |
147 }; |
150 }; |
148 |
151 |
149 |
152 |
150 struct _ConfOpt; |
153 struct _ConfOpt; |
151 |
154 |
152 typedef struct _Tokenizer_FInfo{ |
155 typedef struct _Tokenizer_FInfo{ |
153 FILE *file; |
156 FILE *file; |
154 char *name; |
157 char *name; |
155 int line; |
158 int line; |
156 int ungetc; |
159 int ungetc; |
|
160 Token ungettok; |
157 } Tokenizer_FInfo; |
161 } Tokenizer_FInfo; |
158 |
162 |
159 typedef struct _Tokenizer{ |
163 typedef struct _Tokenizer{ |
160 FILE *file; |
164 FILE *file; |
161 char *name; |
165 char *name; |
162 int line; |
166 int line; |
163 int ungetc; |
167 int ungetc; |
|
168 Token ungettok; |
164 |
169 |
165 int flags; |
170 int flags; |
166 const struct _ConfOpt **optstack; |
171 const struct _ConfOpt **optstack; |
167 int nest_lvl; |
172 int nest_lvl; |
168 void *user_data; |
173 void *user_data; |
174 |
179 |
175 extern Tokenizer *tokz_open(const char *fname); |
180 extern Tokenizer *tokz_open(const char *fname); |
176 extern Tokenizer *tokz_open_file(FILE *file); |
181 extern Tokenizer *tokz_open_file(FILE *file); |
177 extern void tokz_close(Tokenizer *tokz); |
182 extern void tokz_close(Tokenizer *tokz); |
178 extern bool tokz_get_token(Tokenizer *tokz, Token *tok); |
183 extern bool tokz_get_token(Tokenizer *tokz, Token *tok); |
|
184 extern void tokz_unget_token(Tokenizer *tokz, Token *tok); |
179 extern void tokz_warn_error(const Tokenizer *tokz, int line, int e); |
185 extern void tokz_warn_error(const Tokenizer *tokz, int line, int e); |
180 |
186 |
181 extern bool tokz_pushf(Tokenizer *tokz, const char *fname); |
187 extern bool tokz_pushf(Tokenizer *tokz, const char *fname); |
182 extern bool tokz_pushf_file(Tokenizer *tokz, FILE *file); |
188 extern bool tokz_pushf_file(Tokenizer *tokz, FILE *file); |
183 extern bool tokz_popf(Tokenizer *tokz); |
189 extern bool tokz_popf(Tokenizer *tokz); |