-
Notifications
You must be signed in to change notification settings - Fork 0
/
lex.l
125 lines (114 loc) · 4.36 KB
/
lex.l
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
125
%{
/*****************************************************************************/
/** Copyright 1988 by Evans & Sutherland Computer Corporation, **/
/** Salt Lake City, Utah **/
/** Portions Copyright 1989 by the Massachusetts Institute of Technology **/
/** Cambridge, Massachusetts **/
/** **/
/** All Rights Reserved **/
/** **/
/** Permission to use, copy, modify, and distribute this software and **/
/** its documentation for any purpose and without fee is hereby **/
/** granted, provided that the above copyright notice appear in all **/
/** copies and that both that copyright notice and this permis- **/
/** sion notice appear in supporting documentation, and that the **/
/** names of Evans & Sutherland and M.I.T. not be used in advertising **/
/** in publicity pertaining to distribution of the software without **/
/** specific, written prior permission. **/
/** **/
/** EVANS & SUTHERLAND AND M.I.T. DISCLAIM ALL WARRANTIES WITH REGARD **/
/** TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- **/
/** ABILITY AND FITNESS, IN NO EVENT SHALL EVANS & SUTHERLAND OR **/
/** M.I.T. BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAM- **/
/** AGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA **/
/** OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER **/
/** TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE **/
/** OR PERFORMANCE OF THIS SOFTWARE. **/
/*****************************************************************************/
/***********************************************************************
*
* $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 <stdio.h> */ /* lex already includes stdio.h */
#include "gram.h"
#include "parse.h"
#include "twm.h"
#include "screen.h"
#include "prototypes.h"
extern char *ProgramName;
extern int ParseError;
int rclineno = 1;
#ifdef FLEX_SCANNER
static int yyget_lineno (void);
static FILE *yyget_in (void);
static FILE *yyget_out (void);
static char *yyget_text (void);
static void yyset_lineno (int line_number );
static void yyset_in (FILE * in_str );
static void yyset_out (FILE * out_str );
static int yyget_debug (void);
static void yyset_debug (int bdebug );
static int yylex_destroy (void);
#undef YY_INPUT
#define YY_INPUT(b,r,s) r = ((b[0] = (*twmInputFunc)()) != 0)
#endif
%}
string \"([^"]|\\.)*\"
regexp \/([^/]|\\.)*\/
number [0-9]+
%%
"{" { return (LB); }
"}" { return (RB); }
"(" { return (LP); }
")" { return (RP); }
"=" { return (EQUALS); }
"~" { return (TILDE); }
":" { return (COLON); }
"+" { return PLUS; }
"-" { return MINUS; }
"|" { return OR; }
[a-zA-Z\._]+|f\.[a-zA-Z\._]+[a-zA-Z\._0-9]+ { int token = parse_keyword (yytext,
&yylval.num);
if (token == ERRORTOKEN) {
twmrc_error_prefix();
fprintf (stderr,
"ignoring unknown keyword: %s\n",
yytext);
ParseError = 1;
} else
return token;
}
"!" { yylval.num = F_EXEC; return FSKEYWORD; }
"^" { yylval.num = F_CUT; return FSKEYWORD; }
{string} { yylval.ptr = (char *)yytext; return STRING; }
{regexp} { yylval.ptr = (char *)yytext; return REGEXP; }
{number} { (void)sscanf((char *)&yytext[0], "%d", &yylval.num);
return (NUMBER);
}
\#[^\n]*\n {++rclineno;}
\n {++rclineno;}
[\t ] {;}
. {
twmrc_error_prefix();
fprintf (stderr,
"ignoring character \"%s\"\n",
yytext);
ParseError = 1;
}
%%
#ifndef yywrap
int yywrap(void) { return(1);}
#endif
#undef input
#undef feof
#define feof() (1)
#define input() (*twmInputFunc)()
#undef output
#define output(c) TwmOutput(c)
#undef unput
#define unput(c) twmUnput(c)