util/epist/epist.y (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
%{ #include <stdio.h> #include <string.h> #include "parser.hh" #define YYPARSE_PARAM parser_obj #define YYSTYPE char* extern "C" { int yylex(); int yywrap() { return 1; } } void yyerror(const char *c) { printf("ERROR: %s\n", c); } %} %token OBRACE EBRACE SEMICOLON DASH NUMBER QUOTES WORD BINDING %% commands: | commands command ; command: action_command | chain_command ; action_command: binding WORD parameter SEMICOLON { ((parser*)parser_obj)->setAction($2); ((parser*)parser_obj)->endAction(); } ; chain_command: binding obrace commands ebrace { ((parser*)parser_obj)->endChain(); } ; binding: binding_w_modifier bind_key ; obrace: OBRACE { ((parser*)parser_obj)->startChain(); } ; ebrace: EBRACE { /* ((parser*)parser_obj)->endChain(); */ } ; binding_w_modifier: | BINDING DASH binding_w_modifier { ((parser*)parser_obj)->addModifier($1); } ; bind_key: OBRACE { ((parser*)parser_obj)->setKey($1); } | EBRACE { ((parser*)parser_obj)->setKey($1); } | DASH { ((parser*)parser_obj)->setKey($1); } | SEMICOLON { ((parser*)parser_obj)->setKey($1); } | NUMBER { ((parser*)parser_obj)->setKey($1); } | WORD { ((parser*)parser_obj)->setKey($1); } ; parameter: | NUMBER { ((parser*)parser_obj)->setArgumentNum($1); } | DASH NUMBER { ((parser*)parser_obj)->setArgumentNegNum($2); } | QUOTES { ((parser*)parser_obj)->setArgumentStr($1); } ; %% |