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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
%{ #ifdef HAVE_CONFIG_H # include "../../config.h" #endif // HAVE_CONFIG_H #include <stdio.h> #include <string.h> #include "parser.hh" #define YYPARSE_PARAM parser_obj #define YYSTYPE char* extern int yylineno; extern char *yytext; extern "C" { int yylex(); int yywrap() { return 1; } } void yyerror(const char *c) { printf("ERROR: %s, on line %d, near %s\n", c, yylineno, yytext); } %} %token OBRACE EBRACE SEMICOLON DASH NUMBER QUOTES WORD BINDING OPTIONS TRUE FALSE %expect 1 %% commands: | commands command | commands options_block ; 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(); } ; options_block: options_keyword OBRACE options EBRACE ; 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); } | TRUE { ((parser*)parser_obj)->setArgumentTrue($1); } | FALSE { ((parser*)parser_obj)->setArgumentFalse($1); } ; options_keyword: OPTIONS ; options: | options option ; option: WORD parameter SEMICOLON { ((parser*)parser_obj)->setOption($1); } ; %% |