You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

expression_parser.c 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "../src/config.h"
  2. #include "../src/main.h"
  3. #include "../src/cfg_file.h"
  4. #include "../src/expressions.h"
  5. rspamd_hash_t *counters = NULL;
  6. int
  7. main (int argc, char **argv)
  8. {
  9. memory_pool_t *pool;
  10. struct expression *cur;
  11. char *line, *outstr;
  12. int r, s;
  13. char buf[BUFSIZ];
  14. pool = memory_pool_new (memory_pool_get_size ());
  15. line = fgets (buf, sizeof (buf), stdin);
  16. while (line) {
  17. s = strlen (line);
  18. if (buf[s - 1] == '\n') {
  19. buf[s - 1] = '\0';
  20. }
  21. if (buf[s - 2] == '\r') {
  22. buf[s - 2] = '\0';
  23. }
  24. r = 0;
  25. cur = parse_expression (pool, line);
  26. s = strlen (line) * 4;
  27. outstr = memory_pool_alloc (pool, s);
  28. while (cur) {
  29. if (cur->type == EXPR_REGEXP) {
  30. r += snprintf (outstr + r, s - r, "OP:%s ", (char *)cur->content.operand);
  31. } else if (cur->type == EXPR_STR) {
  32. r += snprintf (outstr + r, s - r, "S:%s ", (char *)cur->content.operand);
  33. } else if (cur->type == EXPR_FUNCTION) {
  34. r += snprintf (outstr + r, s - r, "F:%s ", ((struct expression_function *)cur->content.operand)->name);
  35. }
  36. else {
  37. r += snprintf (outstr + r, s - r, "O:%c ", cur->content.operation);
  38. }
  39. cur = cur->next;
  40. }
  41. printf ("Parsed expression: '%s' -> '%s'\n", line, outstr);
  42. line = fgets (buf, sizeof (buf), stdin);
  43. }
  44. memory_pool_delete (pool);
  45. return 0;
  46. }