]> icculus.org git repositories - mikachu/openbox.git/blob - util/epist/epist.y
uber patch.
[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 OPTIONS
24
25 %%
26
27 commands:
28     | commands command
29     | commands options_block
30     ;
31
32 command:
33     action_command | chain_command
34     ;
35
36 action_command:
37     binding WORD parameter SEMICOLON
38     {
39         ((parser*)parser_obj)->setAction($2);
40         ((parser*)parser_obj)->endAction();
41     }
42     
43     ;
44
45 chain_command:
46     binding obrace commands ebrace
47     {
48         ((parser*)parser_obj)->endChain();
49     }
50     ;
51
52 options_block:
53     options_keyword OBRACE options EBRACE
54     ;
55
56 binding:
57     binding_w_modifier bind_key
58     ;
59
60 obrace:
61     OBRACE { ((parser*)parser_obj)->startChain(); }
62     ;
63
64 ebrace:
65     EBRACE { /* ((parser*)parser_obj)->endChain(); */ }
66     ;
67
68 binding_w_modifier:
69     | BINDING DASH binding_w_modifier { ((parser*)parser_obj)->addModifier($1); }
70     ;
71
72 bind_key:
73     OBRACE       { ((parser*)parser_obj)->setKey($1); }
74     | EBRACE     { ((parser*)parser_obj)->setKey($1); }
75     | DASH       { ((parser*)parser_obj)->setKey($1); }
76     | SEMICOLON  { ((parser*)parser_obj)->setKey($1); }
77     | NUMBER     { ((parser*)parser_obj)->setKey($1); }
78     | WORD       { ((parser*)parser_obj)->setKey($1); }
79     ;
80
81 parameter:
82     | NUMBER      { ((parser*)parser_obj)->setArgumentNum($1); }
83     | DASH NUMBER { ((parser*)parser_obj)->setArgumentNegNum($2); }
84     | QUOTES      { ((parser*)parser_obj)->setArgumentStr($1); }
85     ;
86
87 options_keyword:
88     OPTIONS
89     ;
90
91 options:
92     | options option
93     ;
94
95 option:
96     WORD parameter SEMICOLON
97     { ((parser*)parser_obj)->setOption($1); }
98     ;
99
100 %%
101