%{
#include "dat.h"
#include "fns.h"
#include "y.tab.h"
%}
%%
"CS:" { yylval.prefix = PrefixCS; return PREFIX; }
"SS:" { yylval.prefix = PrefixSS; return PREFIX; }
"DS:" { yylval.prefix = PrefixDS; return PREFIX; }
"ES:" { yylval.prefix = PrefixES; return PREFIX; }
"FS:" { yylval.prefix = PrefixFS; return PREFIX; }
"GS:" { yylval.prefix = PrefixGS; return PREFIX; }
"AX" { yylval.r32 = RAX; return REG32; }
"CX" { yylval.r32 = RCX; return REG32; }
"DX" { yylval.r32 = RDX; return REG32; }
"BX" { yylval.r32 = RBX; return REG32; }
"SP" { yylval.r32 = RSP; return REG32; }
"BP" { yylval.r32 = RBP; return REG32; }
"SI" { yylval.r32 = RSI; return REG32; }
"DI" { yylval.r32 = RDI; return REG32; }
"AL" { yylval.r8 = RAL; return REG8; }
"CL" { yylval.r8 = RCL; return REG8; }
"DL" { yylval.r8 = RDL; return REG8; }
"BL" { yylval.r8 = RBL; return REG8; }
"AH" { yylval.r8 = RAH; return REG8; }
"CH" { yylval.r8 = RCH; return REG8; }
"DH" { yylval.r8 = RDH; return REG8; }
"BH" { yylval.r8 = RBH; return REG8; }
[ \t] { }
"[" { return '['; }
"]" { return ']'; }
"," { return ','; }
"*" { return '*'; }
"\n" { return '\n'; }
0[Xx][0-9A-Fa-f]+ { yylval.i = strtol(yytext+2, nil, 16); return CONST; }
0[0-7]+ { yylval.i = strtol(yytext+1, nil, 8); return CONST; }
[1-9][0-9]* { yylval.i = strtol(yytext, nil, 10); return CONST; }
0 { yylval.i = 0; return CONST; }
[A-Z]* { yylval.s = atom(yytext); return OP; }
%%
|