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