blob: b4314eccc4bc1167d5e979920d192a462cabd9f8 (
plain)
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
|
%{
/*
* The Unix Channel
*
* by Michel Beaudouin-Lafon
*
* Copyright 1993
* Centre d'Etudes de la Navigation Aerienne (CENA)
*
* Request management, by Stephane Chatty
*
* $Id$
* $CurLog$
*/
#include <stdio.h>
#include <string.h>
#include "ccu/HashTable.h"
#include "ccu/String.h"
#include "ReqMgr.yacc.h" // produced from the parser file with '-d' option of yacc
extern int tee (int);
#define RETURN(x) return (tee(x))
extern "C" {
int atoi (const char *);
void exit (int);
int read (int, char*, int);
}
CcuDictionnary* ResWords;
int LineNo = 1;
static char IdBuf [1024];
void
LexInit ()
{
if (!ResWords) {
ResWords = new CcuDictionnary (10);
(*ResWords)["service"] = (void*) (Y_SERVICE);
(*ResWords)["request"] = (void*) (Y_REQUEST);
(*ResWords)["answer"] = (void*) (Y_ANSWER);
(*ResWords)["event"] = (void*) (Y_EVENT);
(*ResWords)["getters"] = (void*) (Y_GETTERS);
(*ResWords)["setters"] = (void*) (Y_SETTERS);
(*ResWords)["const"] = (void*) (Y_CONST);
// (*ResWords)[""] = (void*) (Y_);
}
LineNo = 1;
#ifdef FLEX_SCANNER
static void yyrestart (FILE*);
yyrestart (0);
#endif
}
%}
Int [-]?[0-9]+
Ident [a-zA-Z_][a-zA-Z_0-9]*
nl [\n]
sp0 [ \t]*
sp1 [ \t]+
LocHeader \"{Ident}.h\"
GlobHeader \<Ident.h\>
%%
[,();{}*] RETURN (yytext[0]);
\%.*\n { /* comments */
++LineNo;
}
{sp1} {}
{nl} {
++LineNo;
}
-> { RETURN (Y_YIELDS); }
#include
{Ident} {
CcuHashCell* c;
if (c = ResWords->Get (yytext)) {
RETURN(int (c->GetInfo ()));
} else {
yylval.string = NewString (yytext);
RETURN (Y_ID);
}
}
. {
RETURN (-1);
}
|