-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmapper.l
More file actions
154 lines (133 loc) · 2.84 KB
/
mapper.l
File metadata and controls
154 lines (133 loc) · 2.84 KB
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
digit [0-9]
letter [a-zA-Z]
symbol {letter}({digit}|{letter})*
%{
#include <stdlib.h>
#include <stdint.h>
#include "y.tab.h"
int get_idsym(char *, uintptr_t *);
void yyerror(char *);
%}
%%
[ \t] /* Ignore whitepaces. */;
"DCL" { return DCL; }
"EQU" { return EQU; }
"IDENT" { return IDENT; }
"CON" { return CON; }
"NCH" { return NCH; }
"STR" { return STR; }
"LAV" { return LAV; }
"LBV" { return LBV; }
"LAL" { return LAL; }
"LCN" { return LCN; }
"LAM" { return LAM; }
"LCM" { return LCM; }
"LAI" { return LAI; }
"LCI" { return LCI; }
"LAA" { return LAA; }
"STV" { return STV; }
"STI" { return STI; }
"CLEAR" { return CLEAR; }
"AAV" { return AAV; }
"ABV" { return ABV; }
"AAL" { return AAL; }
"SAV" { return SAV; }
"SBV" { return SBV; }
"SAL" { return SAL; }
"SBL" { return SBL; }
"MULTL" { return MULTL; }
"BUMP" { return BUMP; }
"ANDV" { return ANDV; }
"ANDL" { return ANDL; }
"CAV" { return CAV; }
"CAL" { return CAL; }
"CCL" { return CCL; }
"CCN" { return CCN; }
"CAI" { return CAI; }
"CCI" { return CCI; }
"SUBR" { return SUBR; }
"EXIT" { return EXIT; }
"GOSUB" { return GOSUB; }
"GOADD" { return GOADD; }
"CSS" { return CSS; }
"GO" { return GO; }
"GOEQ" { return GOEQ; }
"GONE" { return GONE; }
"GOGE" { return GOGE; }
"GOGR" { return GOGR; }
"GOLE" { return GOLE; }
"GOLT" { return GOLT; }
"GOPC" { return GOPC; }
"GOND" { return GOND; }
"FSTK" { return FSTK; }
"BSTK" { return BSTK; }
"CFSTK" { return CFSTK; }
"UNSTK" { return UNSTK; }
"FMOVE" { return FMOVE; }
"BMOVE" { return BMOVE; }
"MESS" { return MESS; }
"NB" { return NB; }
"PRGST" { return PRGST; }
"PRGEN" { return PRGEN; }
"ALIGN" { return ALIGN; }
"NLREP" { return NLREP; }
"SPREP" { return SPREP; }
"TABREP" { return TABREP; }
"QUTREP" { return QUTREP; }
"OF" { return OF; }
"LCH" { return LCH; }
"LNM" { return LNM; }
"LICH" { return LICH; }
/* ML/I Extensions. */
"HASH" { return HASH; }
"THASH" { return THASH; }
"RL" { return RL; }
"WTHS" { return WTHS; }
"STOPCD" { return STOPCD; }
"SLREP" { return SLREP; }
"LHV" { return LHV; }
"LINKR" { return LINKR; }
"LINKB" { return LINKB; }
"ORL" { return ORL; }
"'"[^'\n]+"'" {
/* Remove lead and tail quote. */
yylval.str = strdup(yytext + 1);
yylval.str[yyleng - 2] = 0;
return STRING;
}
{symbol} {
uintptr_t idval;
if ( get_idsym(yytext, &idval) ) {
yylval.num = idval;
return NUMBER;
}
yylval.str = strdup(yytext);
return SYMBOL;
}
(0|[1-9]({digit})*) {
yylval.num = atoi(yytext);
return NUMBER;
}
"["{symbol}"]" {
/* Remove lead and tail bracket. */
yylval.str = strdup(yytext + 1);
yylval.str[yyleng - 2] = 0;
return LABEL;
}
[,+\-*/:><()=$] {
return *yytext;
}
\n {
yylineno++;
return EOL;
}
. {
yyerror("Invalid Character.");
yyerror(yytext);
exit(-1);
}
%%
int yywrap(void)
{
return 1;
}