blob: 8c1e8e4313b6bacf73d307ecc13d21919a571ba0 (
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
|
%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include "itbl-parse.h"
#ifdef DEBUG
#define DBG(x) printf x
#define MDBG(x) printf x
#else
#define DBG(x)
#define MDBG(x)
#endif
int insntbl_line = 1;
%}
ALNUM [A-Za-z0-9_]
DIGIT [0-9]
ALPHA [A-Za-z_]
HEX [0-9A-Fa-f]
%%
"creg"|"CREG" {
return CREG;
}
"dreg"|"DREG" {
return DREG;
}
"greg"|"GREG" {
return GREG;
}
"immed"|"IMMED" {
return IMMED;
}
"addr"|"ADDR" {
return ADDR;
}
"insn"|"INSN" {
return INSN;
}
"p"{DIGIT} {
yytext[yyleng]=0;
yylval.processor = strtoul(yytext+1,0,0);
return PNUM;
}
{DIGIT}+ {
yytext[yyleng]=0;
yylval.num = strtoul(yytext,0,0);
return NUM;
}
"0x"{HEX}+ {
yytext[yyleng]=0;
yylval.num = strtoul(yytext,0,0);
return NUM;
}
{ALPHA}{ALNUM}* {
yytext[yyleng]=0;
yylval.str = strdup(yytext);
return ID;
}
";"|"#" {
int c;
while ((c = input()) != EOF) {
if (c == '\n')
{
unput(c);
break;
}
}
}
"\n" {
insntbl_line++;
MDBG(("in lex, NL=%d (x%x)\n",NL,NL));
return NL;
}
" "|"\t" { }
. {
MDBG(("char=%x,%d\n",yytext[0],yytext[0]));
return yytext[0];
}
%%
int yywrap() { return 1; }
|