parse.y 781 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /* parser */
  2. %{
  3. #include <stdio.h>
  4. extern int yylineno;
  5. extern int do_quit;
  6. static void yyerror(const char *);
  7. static void yyerror(const char *errmsg)
  8. {
  9. fprintf(stderr, "ruleset line %d: %s.", yylineno - 1, errmsg);
  10. }
  11. int yywrap(void)
  12. {
  13. return (1);
  14. }
  15. int dbinsert(size_t key, char *data);
  16. int dbdelete(size_t key);
  17. int dbget(size_t key);
  18. %}
  19. %union
  20. {
  21. size_t number;
  22. char *string;
  23. }
  24. %token <number> KEY
  25. %token <string> STRING
  26. %token QUOTE INSERT DELETE GET QUIT
  27. %%
  28. ruleset: /*empty*/
  29. | ruleset command
  30. ;
  31. command:
  32. insert
  33. |
  34. delete
  35. |
  36. get
  37. |
  38. quit
  39. ;
  40. insert:
  41. INSERT KEY STRING
  42. {
  43. dbinsert($2, $3);
  44. }
  45. ;
  46. delete:
  47. DELETE KEY
  48. {
  49. dbdelete($2);
  50. }
  51. ;
  52. get:
  53. GET KEY
  54. {
  55. dbget($2);
  56. }
  57. ;
  58. quit:
  59. QUIT
  60. {
  61. do_quit = 1;
  62. YYACCEPT;
  63. }
  64. ;
  65. %%