1 |
/* $Id: VarDic.lex,v 1.2 1997/03/22 20:58:46 cnh Exp $ */ |
2 |
/* Lex analyser to process variable database into HTML table */ |
3 |
%p 100000 |
4 |
%a 100000 |
5 |
%o 100000 |
6 |
%n 100000 |
7 |
%k 100000 |
8 |
%e 100000 |
9 |
%option noyywrap |
10 |
|
11 |
/* Matches variable names */ |
12 |
NAME [_a-zA-Z]+[_a-zA-Z0-9\./]* |
13 |
|
14 |
%{ |
15 |
#include <stdio.h> |
16 |
#include <string.h> |
17 |
#include "VarDic.tab.h" |
18 |
#include "GLOBALS.h" |
19 |
|
20 |
/* DEBUGGING aids */ |
21 |
#define DP(a) |
22 |
#define DP(a) (printf("\"%s\" (%d,%d)\n",a,Lno,Cno)) |
23 |
#define RETURN(a) return(a) |
24 |
/* #define RETURN(a) printf("Token %d\n",a);return(a) */ |
25 |
%} |
26 |
%% |
27 |
^#.* {DP("COMMENT");} |
28 |
HREF {DP("HREF"); Cno=Cno+VarDicleng; RETURN(HREF);} |
29 |
TEXT {DP("TEXT"); Cno=Cno+VarDicleng; RETURN(TEXT);} |
30 |
UNITS {DP("UNITS"); Cno=Cno+VarDicleng; RETURN(UNITS);} |
31 |
NOTES {DP("NOTES"); Cno=Cno+VarDicleng; RETURN(NOTES);} |
32 |
{NAME} {DP("NAME"); Cno=Cno+VarDicleng; |
33 |
VarDiclval.stringPtr=strdup(VarDictext); |
34 |
RETURN(NAME);} |
35 |
[ ] {DP("SPACE"); Cno=Cno+VarDicleng; } |
36 |
\{ {DP("{"); Cno=Cno+VarDicleng; RETURN('{');} |
37 |
\} {DP("}"); Cno=Cno+VarDicleng; RETURN('}');} |
38 |
; {DP(";"); Cno=Cno+VarDicleng; RETURN(';');} |
39 |
= {DP("="); Cno=Cno+VarDicleng; RETURN('=');} |
40 |
|
41 |
\"([^\"\n\\\\"]|\\.)*\" {DP("STRING"); Cno=Cno+VarDicleng; |
42 |
VarDiclval.stringPtr=strcopy(VarDictext+1); |
43 |
VarDiclval.stringPtr[strlen(VarDiclval.stringPtr)-1]='\0'; |
44 |
RETURN(STRING);} |
45 |
|
46 |
\"([^\"\n\\\\"]|\\.)*$ {DP("UNTERMINATED STRING"); |
47 |
Cno=Cno+VarDicleng; |
48 |
fprintf(stderr, |
49 |
"Error: unterminated string. <%s> Line %d Column %d\n", |
50 |
currentFile,Lno,Cno); |
51 |
fprintf(stderr,"==> %s\n",VarDictext); |
52 |
} |
53 |
|
54 |
|
55 |
\n {DP("\\n"); |
56 |
++Lno;Cno=1; |
57 |
} |
58 |
|
59 |
. {DP("UNMATCHED"); |
60 |
Cno=Cno+VarDicleng; |
61 |
} |