diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-04-02 19:25:41 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-04-02 19:25:41 +0000 |
| commit | 67bbd6970ce0b807397e5ecb3255982d7b1cc617 (patch) | |
| tree | 6f537f3f61f7ef1d7474b20f0db91d6c2dbe5186 /openbox/parse.y | |
| parent | fadc760c66ebc0d76b3a4b827ac488c19b252d77 (diff) | |
rename the parse.yacc to parse.y
Diffstat (limited to 'openbox/parse.y')
| -rw-r--r-- | openbox/parse.y | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/openbox/parse.y b/openbox/parse.y new file mode 100644 index 00000000..e9b469e0 --- /dev/null +++ b/openbox/parse.y @@ -0,0 +1,98 @@ +%{ +#include "parse.h" +#ifdef HAVE_STDIO_H +# include <stdio.h> +#endif + +extern int yylex(); + +extern int yylineno; +extern FILE *yyin; + +static char *path; +static union ParseToken t; + +/* in parse.c */ +void parse_token(ParseTokenType type, union ParseToken token); +void parse_set_section(char *section); +%} + +%union ParseToken { + float real; + int integer; + char *string; + char *identifier; + gboolean bool; + char character; +} + +%token <real> REAL +%token <integer> INTEGER +%token <string> STRING +%token <identifier> IDENTIFIER +%token <bool> BOOL +%token <character> '(' +%token <character> ')' +%token <character> '{' +%token <character> '}' +%token <character> '=' +%token <character> ',' +%token <character> '\n' +%token INVALID + +%% + +sections: + | sections '[' IDENTIFIER ']' { parse_set_section($3); } '\n' lines + ; + +lines: + | lines tokens '\n' { t.character = $3; parse_token(TOKEN_NEWLINE, t); } + ; + +tokens: + tokens token + | token + ; + +token: + REAL { t.real = $1; parse_token(TOKEN_REAL, t); } + | INTEGER { t.integer = $1; parse_token(TOKEN_INTEGER, t); } + | STRING { t.string = $1; parse_token(TOKEN_STRING, t); } + | IDENTIFIER { t.identifier = $1; parse_token(TOKEN_IDENTIFIER, t); } + | BOOL { t.bool = $1; parse_token(TOKEN_BOOL, t); } + | '(' { t.character = $1; parse_token(TOKEN_LBRACKET, t); } + | ')' { t.character = $1; parse_token(TOKEN_RBRACKET, t); } + | '{' { t.character = $1; parse_token(TOKEN_LBRACE, t); } + | '}' { t.character = $1; parse_token(TOKEN_RBRACE, t); } + | '=' { t.character = $1; parse_token(TOKEN_EQUALS, t); } + | ',' { t.character = $1; parse_token(TOKEN_COMMA, t); } + ; + +%% + +void yyerror(char *err) { + g_message("%s:%d: %s", path, yylineno, err); +} + +void parse_rc() +{ + /* try the user's rc */ + path = g_build_filename(g_get_home_dir(), ".openbox", "rc3", NULL); + if ((yyin = fopen(path, "r")) == NULL) { + g_free(path); + /* try the system wide rc */ + path = g_build_filename(RCDIR, "rc3", NULL); + if ((yyin = fopen(path, "r")) == NULL) { + g_warning("No rc2 file found!"); + g_free(path); + return; + } + } + + yylineno = 1; + + yyparse(); + + g_free(path); +} |
