blob: 4d9e4786eecc9ab45e09f52411a540a33a27dc0d (
plain) (
blame)
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
|
%{
#include <stdlib.h>
#include "instruction.h"
#include "y.tab.h"
%}
%%
"//"[^\n]* ; /* Skip comments */
[%\t ]+ ; /* Skip whitespace */
0x[0-9a-f]+ {
yylval.lit = yytext+2;
return HEX_NUMBER;
}
[0-9]+ {
yylval.num = atoi(yytext);
return DEC_NUMBER;
}
r[0-9][0-9]? {
yylval.num = atoi(++yytext); /* Skip the first character? */
return REG_ID;
}
"wait"|"WAIT" return WAIT;
"add"|"ADD" return ADD;
"addi"|"ADDI" return ADDI;
"sub"|"SUB" return SUB;
"subi"|"SUBI" return SUBI;
"mov"|"MOV" return MOV;
"src"|"SRC" return SRC;
"li"|"LI" return LI;
"ldwd"|"LDWD" return LDWD;
"bl"|"BL" return BRL;
"beq"|"beq" return BREQ;
"jmp"|"JMP" return JMP;
"wr"|"WR" return WR;
"rd"|"RD" return RD;
"act"|"ACT" return ACT;
"pre"|"PRE" return PRE;
"ref"|"REF" return REF;
"zq"|"ZQ" return ZQ;
"end"|"END" return END;
"++" return INCREMENT;
"AP"|"ap" return AUTO_PRECHARGE;
"BC"|"bc" return BURST_CHOP;
"PA"|"pa" return PRECHARGE_ALL;
"times" return GENFOR;
"ENDPROGRAM" return ENDPROGRAM;
[a-z_]+ {
char* var_name = (char*) malloc((yyleng+1)*sizeof(char));
strcpy(var_name, yytext);
yylval.lit = var_name;
return VARIABLE;
}
[A-Z_]+ {
char* lbl_name = (char*) malloc((yyleng+1)*sizeof(char));
strcpy(lbl_name, yytext);
yylval.lit = lbl_name;
return LABEL;
}
. return *yytext;
%%
int yywrap(void) { return 1; }
|