parser.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /* $Id: parser.c,v 1.8 2001/05/07 08:29:51 kilobug Exp $ */
  2. #include "server.h"
  3. void parser_check_type(GScanner *scan, GTokenType type, GTokenType wanted)
  4. {
  5. if (type != wanted)
  6. {
  7. g_scanner_unexp_token(scan, wanted, NULL, NULL, NULL, NULL, TRUE);
  8. abort();
  9. }
  10. }
  11. int parser_get_symbol_as_int(GScanner *scan)
  12. {
  13. return *((int *) g_scanner_cur_value(scan).v_symbol);
  14. }
  15. double parser_get_symbol_as_float(GScanner *scan)
  16. {
  17. return *((double *) g_scanner_cur_value(scan).v_symbol);
  18. }
  19. char *parser_get_symbol_as_string(GScanner *scan)
  20. {
  21. return g_strdup(g_scanner_cur_value(scan).v_symbol);
  22. }
  23. int parser_get_int(GScanner *scan)
  24. {
  25. scan->config->int_2_float = FALSE;
  26. switch (g_scanner_get_next_token(scan))
  27. {
  28. case G_TOKEN_INT:
  29. return g_scanner_cur_value(scan).v_int;
  30. case G_TOKEN_SYMBOL:
  31. return parser_get_symbol_as_int(scan);
  32. default:
  33. g_scanner_unexp_token(scan, G_TOKEN_INT, NULL, NULL, NULL,
  34. NULL, TRUE);
  35. abort();
  36. }
  37. }
  38. double parser_get_float(GScanner *scan)
  39. {
  40. scan->config->int_2_float = TRUE;
  41. switch (g_scanner_get_next_token(scan))
  42. {
  43. case '-':
  44. return -parser_get_float(scan);
  45. case G_TOKEN_FLOAT:
  46. return g_scanner_cur_value(scan).v_float;
  47. case G_TOKEN_SYMBOL:
  48. return parser_get_symbol_as_float(scan);
  49. default:
  50. g_scanner_unexp_token(scan, G_TOKEN_FLOAT, NULL, NULL, NULL,
  51. NULL, TRUE);
  52. abort();
  53. }
  54. }
  55. char *parser_get_string(GScanner *scan)
  56. {
  57. switch (g_scanner_get_next_token(scan))
  58. {
  59. case G_TOKEN_STRING:
  60. return g_strdup(g_scanner_cur_value(scan).v_string);
  61. case G_TOKEN_SYMBOL:
  62. return parser_get_symbol_as_string(scan);
  63. default:
  64. g_scanner_unexp_token(scan, G_TOKEN_STRING, NULL, NULL, NULL,
  65. NULL, TRUE);
  66. abort();
  67. }
  68. }