File: lex.l

package info (click to toggle)
amiwm 0.22pl2-5
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 1,048 kB
  • sloc: ansic: 10,195; perl: 443; makefile: 258; yacc: 245; lex: 215; sh: 211
file content (70 lines) | stat: -rw-r--r-- 1,256 bytes parent folder | download | duplicates (4)
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
%{
#include <stdio.h>
#include "gram.h"
extern char *progname;
extern int ParseError;
extern FILE *rcfile;
#undef yyin
#define yyin rcfile
#define YY_SKIP_YYWRAP
#define yywrap() 1
extern int parse_keyword(char *);
void fixup_string(char *, char *);
#define YY_SKIP_YYWRAP
%}
%%

\#[^\n]*\n	{ ; }

\"([^"\n\\]|\\.|\\\n)*\"    { fixup_string(yytext, yytext); yylval.ptr=yytext;
			  return STRING; }

[0-9]+ { yylval.num=atoi(yytext); return NUMBER; }

[a-zA-Z]+	{ int token = parse_keyword(yytext);
		  if(token == ERRORTOKEN) {
		    fprintf(stderr, "%s: ignoring unknown keyword: %s\n",
			    progname, yytext);
		    ParseError=1;
		  } else
		    return token;
		}

\{		{ return LEFTBRACE; }

\}		{ return RIGHTBRACE; }

[\r\n\t ]	{ ; }

.		{ fprintf(stderr, "%s: illegal character \"%s\" ignored\n",
			  progname, yytext);
		  ParseError=1; }

%%
void fixup_string(char *src, char *dest)
{
  src++;
  while(*src!='"')
    if((*dest++=*src++)=='\\')
      switch((dest[-1]=*src++)) {
      case 'n':
	dest[-1]='\n';
	break;
      case 'r':
	dest[-1]='\r';
	break;
      case 'a':
	dest[-1]='\a';
	break;
      case 'b':
	dest[-1]='\b';
	break;
      case 't':
	dest[-1]='\t';
	break;
      case 'e':
	dest[-1]='\033';
	break;
      }
  *dest='\0';
}