1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
%{
/*
* Copyright 1988 by Evans & Sutherland Computer Corporation,
* Salt Lake City, Utah
* Portions Copyright 1989 by the Massachusetts Institute of Technology
* Cambridge, Massachusetts
*
* Copyright 1992 Claude Lecommandeur.
*/
/***********************************************************************
*
* $XConsortium: lex.l,v 1.62 89/12/10 17:46:33 jim Exp $
*
* .twmrc lex file
*
* 12-Nov-87 Thomas E. LaStrange File created
*
***********************************************************************/
#include "ctwm.h"
#include "functions_defs.h"
#include "parse.h"
#include "parse_be.h"
#include "gram.tab.h"
/*
* flex uses a YY_INPUT macro internally rather than input. It doesn't
* need unput since it maintains state internally.
*/
#ifdef FLEX_SCANNER
# undef YY_INPUT
# define YY_INPUT(buf,result,max_size) {buf[0]=twmInputFunc();result=(buf[0] != 0);}
#endif
/*
* YY_FLEX_{MAJOR,MINOR}_VERSION was added in 2.5.1 (28Mar95); just in
* case we need to do version checks of stuff.
*/
/*
* flex listens to these to avoid declaring these functions, which we
* don't use, so suppress the warning.
*/
#define YY_NO_UNPUT
#define YY_NO_INPUT
%}
string \"([^"]|\\.)*\"
number [0-9]+
%%
"{" { return (LB); }
"}" { return (RB); }
"(" { return (LP); }
")" { return (RP); }
"=" { return (EQUALS); }
":" { return (COLON); }
"+" { return PLUS; }
"-" { return MINUS; }
"|" { return OR; }
[a-zA-Z\.]+ { int token = parse_keyword (yytext,
&yylval.num);
if (token == ERRORTOKEN) {
twmrc_error_prefix();
fprintf (stderr,
"ignoring unknown keyword: %s\n",
yytext);
ParseError = true;
} else
return token;
}
"!" { yylval.num = F_EXEC; return FSKEYWORD; }
{string} { yylval.ptr = yytext; return STRING; }
{number} { sscanf(yytext, "%d", &yylval.num);
return NUMBER; }
\#[^\n]*\n {;}
[\n\t ] {;}
. {
twmrc_error_prefix();
fprintf (stderr,
"ignoring character \"%s\"\n",
yytext);
ParseError = true;
}
%%
/*
* In flex versions before 2.4.1 (30Nov93), yywrap was a macro, not a
* function. There's no way we really support versions that old, but
* what the heck...
*/
#ifndef yywrap
int yywrap(void) { return(1);}
#endif
/* AT&T lex uses the input/unput macros */
#ifndef FLEX_SCANNER
/*
* I believe Solaris at least recently recently (and maybe currently)
* ships with an AT&T lex, but also with flex beside it. Plan
* 9 might ship only A&T lex?
*
* However, our current build toolchain doesn't look for any lex other
* than flex. So #error out if we get here; adventurous users might take
* this out, and it might work; let us know!
*/
#error Not supported on non-flex; remove this line at your own risk
#ifdef NON_FLEX_LEX
#undef unput
#undef input
#undef output
#undef feof
#define unput(c) twmUnput(c)
#define input() (*twmInputFunc)()
#define output(c) TwmOutput(c)
#define feof() (1)
#endif /* NON_FLEX_LEX */
#endif /* !FLEX_SCANNER */
|