]> Dogcows Code - chaz/openbox/blob - util/epist/epist.y
initial checkin
[chaz/openbox] / util / epist / epist.y
1 %{
2 #ifdef HAVE_CONFIG_H
3 # include "../../config.h"
4 #endif // HAVE_CONFIG_H
5
6 #include <stdio.h>
7 #include <string.h>
8 #include "parser.hh"
9
10 #define YYPARSE_PARAM parser_obj
11 #define YYSTYPE char*
12
13 extern "C" {
14 int yylex();
15 int yywrap() {
16 return 1;
17 }
18 }
19
20 void yyerror(const char *c) {
21 printf("ERROR: %s\n", c);
22 }
23
24
25 %}
26
27 %token OBRACE EBRACE SEMICOLON DASH NUMBER QUOTES WORD BINDING OPTIONS TRUE FALSE
28
29 %%
30
31 commands:
32 | commands command
33 | commands options_block
34 ;
35
36 command:
37 action_command | chain_command
38 ;
39
40 action_command:
41 binding WORD parameter SEMICOLON
42 {
43 ((parser*)parser_obj)->setAction($2);
44 ((parser*)parser_obj)->endAction();
45 }
46
47 ;
48
49 chain_command:
50 binding obrace commands ebrace
51 {
52 ((parser*)parser_obj)->endChain();
53 }
54 ;
55
56 options_block:
57 options_keyword OBRACE options EBRACE
58 ;
59
60 binding:
61 binding_w_modifier bind_key
62 ;
63
64 obrace:
65 OBRACE { ((parser*)parser_obj)->startChain(); }
66 ;
67
68 ebrace:
69 EBRACE { /* ((parser*)parser_obj)->endChain(); */ }
70 ;
71
72 binding_w_modifier:
73 | BINDING DASH binding_w_modifier { ((parser*)parser_obj)->addModifier($1); }
74 ;
75
76 bind_key:
77 OBRACE { ((parser*)parser_obj)->setKey($1); }
78 | EBRACE { ((parser*)parser_obj)->setKey($1); }
79 | DASH { ((parser*)parser_obj)->setKey($1); }
80 | SEMICOLON { ((parser*)parser_obj)->setKey($1); }
81 | NUMBER { ((parser*)parser_obj)->setKey($1); }
82 | WORD { ((parser*)parser_obj)->setKey($1); }
83 ;
84
85 parameter:
86 | NUMBER { ((parser*)parser_obj)->setArgumentNum($1); }
87 | DASH NUMBER { ((parser*)parser_obj)->setArgumentNegNum($2); }
88 | QUOTES { ((parser*)parser_obj)->setArgumentStr($1); }
89 | TRUE { ((parser*)parser_obj)->setArgumentTrue($1); }
90 | FALSE { ((parser*)parser_obj)->setArgumentFalse($1); }
91 ;
92
93 options_keyword:
94 OPTIONS
95 ;
96
97 options:
98 | options option
99 ;
100
101 option:
102 WORD parameter SEMICOLON
103 { ((parser*)parser_obj)->setOption($1); }
104 ;
105
106 %%
107
This page took 0.038398 seconds and 4 git commands to generate.