X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fepist.y;h=243e416877c5ca8f268efd198c68b2bb00c9d02d;hb=f1b9e2168d8c1b03b0fcf0b6dd70aa46c513059d;hp=60fe9aaaa9f88519b3919dc4423f019276202bb5;hpb=6d40002093a5d8e665d4f310ea028d22e93e88cb;p=chaz%2Fopenbox diff --git a/util/epist/epist.y b/util/epist/epist.y index 60fe9aaa..243e4168 100644 --- a/util/epist/epist.y +++ b/util/epist/epist.y @@ -1,11 +1,18 @@ %{ +#ifdef HAVE_CONFIG_H +# include "../../config.h" +#endif // HAVE_CONFIG_H + #include #include #include "parser.hh" #define YYPARSE_PARAM parser_obj #define YYSTYPE char* - + +extern int yylineno; +extern char *yytext; + extern "C" { int yylex(); int yywrap() { @@ -13,19 +20,21 @@ extern "C" { } } -void yyerror(const char *c) { - printf("ERROR: %s\n", c); +void yyerror(const char *c) +{ + printf("ERROR: %s, on line %d, near %s\n", c, yylineno, yytext); } - %} -%token OBRACE EBRACE SEMICOLON DASH ACTION BINDING NUMBER QUOTES WORD +%token OBRACE EBRACE SEMICOLON DASH NUMBER QUOTES WORD BINDING OPTIONS TRUE FALSE +%expect 1 %% commands: | commands command + | commands options_block ; command: @@ -33,7 +42,7 @@ command: ; action_command: - binding ACTION parameter SEMICOLON + binding WORD parameter SEMICOLON { ((parser*)parser_obj)->setAction($2); ((parser*)parser_obj)->endAction(); @@ -48,6 +57,10 @@ chain_command: } ; +options_block: + options_keyword OBRACE options EBRACE + ; + binding: binding_w_modifier bind_key ; @@ -59,7 +72,7 @@ obrace: ebrace: EBRACE { /* ((parser*)parser_obj)->endChain(); */ } ; - + binding_w_modifier: | BINDING DASH binding_w_modifier { ((parser*)parser_obj)->addModifier($1); } ; @@ -72,11 +85,26 @@ bind_key: | NUMBER { ((parser*)parser_obj)->setKey($1); } | WORD { ((parser*)parser_obj)->setKey($1); } ; - + parameter: - | NUMBER { ((parser*)parser_obj)->setArgument($1); } - | DASH NUMBER { ((parser*)parser_obj)->setArgument($1); } - | QUOTES { ((parser*)parser_obj)->setArgument($1); } + | 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); } ; %%