1%option prefix="asm_"
2%option outfile="lex.yy.c"
3%option noyywrap
4%option nounput
5%option noinput
6
7D       [0-9]
8H       [0-9a-fA-F_]
9L       [a-zA-Z_]
10T       [0-9a-zA-Z_]
11IDENTIFIER {L}+{T}*
12
13%{
14
15#include <stdio.h>
16#include "tokenizer.h"
17%}
18
19%x comment
20%x string_literal
21
22%%
23"auto"                  { return(TOKENIZER_TYPE); }
24"bool"                  { return(TOKENIZER_TYPE); }
25"char"                  { return(TOKENIZER_TYPE); }
26"class"                 { return(TOKENIZER_TYPE); }
27"const"                 { return(TOKENIZER_TYPE); }
28"double"                { return(TOKENIZER_TYPE); }
29"enum"                  { return(TOKENIZER_TYPE); }
30"extern"                { return(TOKENIZER_TYPE); }
31"explicit"              { return(TOKENIZER_TYPE); }
32"float"                 { return(TOKENIZER_TYPE); }
33"friend"                { return(TOKENIZER_TYPE); }
34"inline"                { return(TOKENIZER_TYPE); }
35"int"                   { return(TOKENIZER_TYPE); }
36"long"                  { return(TOKENIZER_TYPE); }
37"mutable"               { return(TOKENIZER_TYPE); }
38"namespace"             { return(TOKENIZER_TYPE); }
39"register"              { return(TOKENIZER_TYPE); }
40"short"                 { return(TOKENIZER_TYPE); }
41"signed"                { return(TOKENIZER_TYPE); }
42"static"                { return(TOKENIZER_TYPE); }
43"struct"                { return(TOKENIZER_TYPE); }
44"union"                 { return(TOKENIZER_TYPE); }
45"unsigned"              { return(TOKENIZER_TYPE); }
46"virtual"               { return(TOKENIZER_TYPE); }
47"void"                  { return(TOKENIZER_TYPE); }
48"volatile"              { return(TOKENIZER_TYPE); }
49"wchar_t"               { return(TOKENIZER_TYPE); }
50
51"and"                   { return(TOKENIZER_KEYWORD); }
52"and_eq"                { return(TOKENIZER_KEYWORD); }
53"asm"                   { return(TOKENIZER_KEYWORD); }
54"bitand"                { return(TOKENIZER_KEYWORD); }
55"bitor"                 { return(TOKENIZER_KEYWORD); }
56"break"                 { return(TOKENIZER_KEYWORD); }
57"case"                  { return(TOKENIZER_KEYWORD); }
58"catch"                 { return(TOKENIZER_KEYWORD); }
59"compl"                 { return(TOKENIZER_KEYWORD); }
60"const_cast"            { return(TOKENIZER_KEYWORD); }
61"continue"              { return(TOKENIZER_KEYWORD); }
62"default"               { return(TOKENIZER_KEYWORD); }
63"delete"                { return(TOKENIZER_KEYWORD); }
64"do"                    { return(TOKENIZER_KEYWORD); }
65"dynamic_cast"          { return(TOKENIZER_KEYWORD); }
66"else"                  { return(TOKENIZER_KEYWORD); }
67"export"                { return(TOKENIZER_KEYWORD); }
68"false"                 { return(TOKENIZER_KEYWORD); }
69"for"                   { return(TOKENIZER_KEYWORD); }
70"goto"                  { return(TOKENIZER_KEYWORD); }
71"if"                    { return(TOKENIZER_KEYWORD); }
72"new"                   { return(TOKENIZER_KEYWORD); }
73"not"                   { return(TOKENIZER_KEYWORD); }
74"not_eq"                { return(TOKENIZER_KEYWORD); }
75"operator"              { return(TOKENIZER_KEYWORD); }
76"or"                    { return(TOKENIZER_KEYWORD); }
77"or_eq"                 { return(TOKENIZER_KEYWORD); }
78"private"               { return(TOKENIZER_KEYWORD); }
79"protected"             { return(TOKENIZER_KEYWORD); }
80"public"                { return(TOKENIZER_KEYWORD); }
81"reinterpret_cast"      { return(TOKENIZER_KEYWORD); }
82"return"                { return(TOKENIZER_KEYWORD); }
83"sizeof"                { return(TOKENIZER_KEYWORD); }
84"static_cast"           { return(TOKENIZER_KEYWORD); }
85"switch"                { return(TOKENIZER_KEYWORD); }
86"template"              { return(TOKENIZER_KEYWORD); }
87"this"                  { return(TOKENIZER_KEYWORD); }
88"throw"                 { return(TOKENIZER_KEYWORD); }
89"true"                  { return(TOKENIZER_KEYWORD); }
90"try"                   { return(TOKENIZER_KEYWORD); }
91"typedef"               { return(TOKENIZER_KEYWORD); }
92"typeid"                { return(TOKENIZER_KEYWORD); }
93"typename"              { return(TOKENIZER_KEYWORD); }
94"using"                 { return(TOKENIZER_KEYWORD); }
95"while"                 { return(TOKENIZER_KEYWORD); }
96"xor"                   { return(TOKENIZER_KEYWORD); }
97"xor_eq"                { return(TOKENIZER_KEYWORD); }
98
99"QWORD"                 { return(TOKENIZER_KEYWORD); }
100"XMMWORD"               { return(TOKENIZER_KEYWORD); }
101"DWORD"                 { return(TOKENIZER_KEYWORD); }
102"WORD"                  { return(TOKENIZER_KEYWORD); }
103"BYTE"                  { return(TOKENIZER_KEYWORD); }
104"PTR"                   { return(TOKENIZER_KEYWORD); }
105
106"/*"                    { BEGIN(comment); return(TOKENIZER_COMMENT); }
107<comment>[^*\r\n]*      { return(TOKENIZER_COMMENT); }
108<comment>"*"+[^*/\r\n]* { return(TOKENIZER_COMMENT); }
109<comment>\n             { return(TOKENIZER_NEWLINE); }
110<comment>\r             { return(TOKENIZER_NEWLINE); }
111<comment>\r\n           { return(TOKENIZER_NEWLINE); }
112<comment>"*"+"/"        { BEGIN(INITIAL); return(TOKENIZER_COMMENT); }
113
114\/\/[^\r\n]*            { return(TOKENIZER_COMMENT); }
115
116#{L}+                   { return(TOKENIZER_DIRECTIVE); }
117
118\"                                          { BEGIN(string_literal);    return(TOKENIZER_LITERAL); }
119<string_literal>(\\[^\r\n]|[^\\"\r\n])*     { return(TOKENIZER_LITERAL); }
120<string_literal>\n                          { return(TOKENIZER_NEWLINE); }
121<string_literal>\r                          { return(TOKENIZER_NEWLINE); }
122<string_literal>\r\n                        { return(TOKENIZER_NEWLINE); }
123<string_literal>\"                          { BEGIN(INITIAL);           return(TOKENIZER_LITERAL); }
124
125
126{D}+                    { return(TOKENIZER_LITERAL); }
127{D}+[lL]                { return(TOKENIZER_LITERAL); }
128{D}+[uU]                { return(TOKENIZER_LITERAL); }
129{D}+[lL][lL]            { return(TOKENIZER_LITERAL); }
130{D}+[uU][lL]            { return(TOKENIZER_LITERAL); }
131{D}+[uU][lL][lL]        { return(TOKENIZER_LITERAL); }
132{D}+[lL][uU]            { return(TOKENIZER_LITERAL); }
133{D}+[lL][lL][uU]        { return(TOKENIZER_LITERAL); }
1340x{H}+                  { return(TOKENIZER_LITERAL); }
1350x{H}+[lL]              { return(TOKENIZER_LITERAL); }
1360x{H}+[uU]              { return(TOKENIZER_LITERAL); }
1370x{H}+[lL][lL]          { return(TOKENIZER_LITERAL); }
1380x{H}+[uU][lL]          { return(TOKENIZER_LITERAL); }
1390x{H}+[uU][lL][lL]      { return(TOKENIZER_LITERAL); }
1400x{H}+[lL][uU]          { return(TOKENIZER_LITERAL); }
1410x{H}+[lL][lL][uU]      { return(TOKENIZER_LITERAL); }
142
143{D}*\.?{D}+([eE][-+]?{D}+)?    { return(TOKENIZER_LITERAL); }
144{D}+\.?({D})?+[fF]      { return(TOKENIZER_LITERAL); }
145\.{D}+[fF]              { return(TOKENIZER_LITERAL); }
146
147'.'                     { return(TOKENIZER_LITERAL); }
148'\\.'                   { return(TOKENIZER_LITERAL); }
149
150\n                      { return(TOKENIZER_NEWLINE); }
151\r\n                    { return(TOKENIZER_NEWLINE); }
152\r                      { return(TOKENIZER_NEWLINE); }
153[ \t\v\f]               { return(TOKENIZER_TEXT);    }
154{IDENTIFIER}            { return(TOKENIZER_TEXT);    }
155.                       { return(TOKENIZER_TEXT);    }
156
157%%
158