summaryrefslogtreecommitdiff
path: root/src/format/mangling/itanium_tok.l
blob: 5eef7999b4476943f737c39bf97f29c127c8ee00 (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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116

%{

#include "itanium_gram.h" 


static unsigned int itanium_txt_length = 0;


/* Borne la longueur d'une chaîne à lire. */
void set_itanium_text_length(unsigned int);


%}


%option noyywrap
%option yylineno


%x identifier


%%


_Z                      { return ITANIUM_SIGNATURE; }

E                       { return EE; }
N                       { return NN; }
I                       { return II; }

C1                      { return C1; }
C2                      { return C2; }
C3                      { return C3; }
D0                      { return C1; }
D1                      { return D2; }
D2                      { return D3; }

v                       { return V; }
w                       { return W; }
b                       { return B; }
c                       { return C; }
a                       { return A; }
h                       { return H; }
s                       { return S; }
t                       { return T; }
i                       { return I; }
j                       { return J; }
l                       { return L; }
m                       { return M; }
x                       { return X; }
y                       { return Y; }
n                       { return N; }
o                       { return O; }
f                       { return F; }
d                       { return D; }
e                       { return E; }
g                       { return G; }
z                       { return Z; }
Dd                      { return DD; }
De                      { return DE; }
Df                      { return DF; }
Dh                      { return DH; }
Di                      { return DI; }
Ds                      { return DS; }
u                       { return U; }

P                       { return TP; }
R                       { return TR; }
O                       { return TO; }
C                       { return TC; }
G                       { return TG; }

r                       { return QR; }
V                       { return QV; }
K                       { return QK; }

St                      { return ST; }
Sa                      { return SA; }
Sb                      { return SB; }
Ss                      { return SS; }
Si                      { return SI; }
So                      { return SO; }
Sd                      { return SD; }


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

<identifier>.           { if (--itanium_txt_length == 0) BEGIN(INITIAL); yylval.car = *yytext; return CHAR; }

<*>.                    { printf("error  : '%s'\n", yytext); }


%%


/******************************************************************************
*                                                                             *
*  Paramètres  : length = taille de chaîne à lire.                            *
*                                                                             *
*  Description : Borne la longueur d'une chaîne à lire.                       *
*                                                                             *
*  Retour      : -                                                            *
*                                                                             *
*  Remarques   : -                                                            *
*                                                                             *
******************************************************************************/

void set_itanium_text_length(unsigned int length)
{
    itanium_txt_length = length;

    BEGIN(identifier);

}