1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /* $Id: parser.c,v 1.8 2001/05/07 08:29:51 kilobug Exp $ */
- #include "server.h"
- void parser_check_type(GScanner *scan, GTokenType type, GTokenType wanted)
- {
- if (type != wanted)
- {
- g_scanner_unexp_token(scan, wanted, NULL, NULL, NULL, NULL, TRUE);
- abort();
- }
- }
- int parser_get_symbol_as_int(GScanner *scan)
- {
- return *((int *) g_scanner_cur_value(scan).v_symbol);
- }
- double parser_get_symbol_as_float(GScanner *scan)
- {
- return *((double *) g_scanner_cur_value(scan).v_symbol);
- }
- char *parser_get_symbol_as_string(GScanner *scan)
- {
- return g_strdup(g_scanner_cur_value(scan).v_symbol);
- }
- int parser_get_int(GScanner *scan)
- {
- scan->config->int_2_float = FALSE;
- switch (g_scanner_get_next_token(scan))
- {
- case G_TOKEN_INT:
- return g_scanner_cur_value(scan).v_int;
- case G_TOKEN_SYMBOL:
- return parser_get_symbol_as_int(scan);
- default:
- g_scanner_unexp_token(scan, G_TOKEN_INT, NULL, NULL, NULL,
- NULL, TRUE);
- abort();
- }
- }
- double parser_get_float(GScanner *scan)
- {
- scan->config->int_2_float = TRUE;
- switch (g_scanner_get_next_token(scan))
- {
- case '-':
- return -parser_get_float(scan);
- case G_TOKEN_FLOAT:
- return g_scanner_cur_value(scan).v_float;
- case G_TOKEN_SYMBOL:
- return parser_get_symbol_as_float(scan);
- default:
- g_scanner_unexp_token(scan, G_TOKEN_FLOAT, NULL, NULL, NULL,
- NULL, TRUE);
- abort();
- }
- }
- char *parser_get_string(GScanner *scan)
- {
- switch (g_scanner_get_next_token(scan))
- {
- case G_TOKEN_STRING:
- return g_strdup(g_scanner_cur_value(scan).v_string);
- case G_TOKEN_SYMBOL:
- return parser_get_symbol_as_string(scan);
- default:
- g_scanner_unexp_token(scan, G_TOKEN_STRING, NULL, NULL, NULL,
- NULL, TRUE);
- abort();
- }
- }
|