Website Summary Files Commits Branches @commit @diff @stats
path: root / spasm / src / asm / lexer.cpp
diff options
context:
space:
mode:
Commitf9654d32bc456d20de03b7eb20888120a59e405d (patch)
Author
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-11-12 23:42:48 +0200
Committer
 Dimitar Trendafilov <dimitar@coherent-labs.com>
2018-11-12 23:42:48 +0200
Files3e1095601a75fe0157142ac92734d3c61d813ad1 /spasm/src/asm/lexer.cpp
IPL-f9654d32bc456d20de03b7eb20888120a59e405d.tar
IPL-f9654d32bc456d20de03b7eb20888120a59e405d.tar.gz
IPL-f9654d32bc456d20de03b7eb20888120a59e405d.zip
Parentf81f1c56cc01ec3d91a73ec7314519ac59abd5b4 (diff)
The assembler works closes to the instruction set spec
1 files changed, 2189 insertions, 1664 deletions
-rw-r--r--spasm/src/asm/lexer.cpp3853
diff --git a/spasm/src/asm/lexer.cpp b/spasm/src/asm/lexer.cpp
index 659beae..86384b3 100644
--- a/spasm/src/asm/lexer.cpp
+++ b/spasm/src/asm/lexer.cpp
@@ -1,1664 +1,2189 @@
-/* Generated by re2c 1.1.1 on Tue Nov 06 22:08:59 2018 */
-#line 1 "lexer.re"
-#include <iostream>
-
-#include "lexer.hpp"
-
-#include "token.hpp"
-
-namespace SpasmImpl
-{
- namespace ASM
- {
- //! Namespace for all lexical analisys classes
- namespace Lexer
- {
-
- Lexer::Lexer (std::istream & _file, size_t _buffer_size)
- : file (&_file), buffer_size (_buffer_size), state (unsigned(-1)),
- lineno (0)
- {
- buffer = new char[buffer_size];
- cursor = limit = marker = token_start = NULL;
- }
-
- Lexer::~Lexer ()
- {
- delete [] buffer;
- }
-
- bool Lexer::tokenize (TokenStream &ts)
- {
-#line 43 "lexer.re"
-
-
-
-
- while (1) {
-
-
-#line 41 "lexer.cpp"
- {
- char yych;
- if ((limit - cursor) < 6) return true;
- yych = *cursor;
- switch (yych) {
- case 0x00: goto yy2;
- case '\t':
- case ' ': goto yy6;
- case '\n': goto yy9;
- case '%': goto yy11;
- case '*': goto yy13;
- case '+': goto yy15;
- case '-': goto yy17;
- case '/': goto yy19;
- case '0': goto yy21;
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy23;
- case '<': goto yy25;
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'k':
- case 'm':
- case 'n':
- case 'o':
- case 'q':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- case 'c': goto yy30;
- case 'd': goto yy31;
- case 'j': goto yy32;
- case 'l': goto yy33;
- case 'p': goto yy34;
- case 'r': goto yy35;
- case 's': goto yy36;
- default: goto yy4;
- }
-yy2:
- ++cursor;
-#line 233 "lexer.re"
- {
- ts.push_token (Token (Token::endinput, lineno));
-
- break;
- }
-#line 130 "lexer.cpp"
-yy4:
- ++cursor;
-#line 239 "lexer.re"
- {
- return false;
- }
-#line 137 "lexer.cpp"
-yy6:
- ++cursor;
- if (limit <= cursor) return true;
- yych = *cursor;
- switch (yych) {
- case '\t':
- case ' ': goto yy6;
- default: goto yy8;
- }
-yy8:
-#line 220 "lexer.re"
- {
- token_start = cursor;
-
- continue;
- }
-#line 154 "lexer.cpp"
-yy9:
- ++cursor;
-#line 226 "lexer.re"
- {
- ++lineno;
- token_start = cursor;
-
- continue;
- }
-#line 164 "lexer.cpp"
-yy11:
- ++cursor;
-#line 137 "lexer.re"
- {
- ts.push_token (Token (Token::modulus, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 174 "lexer.cpp"
-yy13:
- ++cursor;
-#line 123 "lexer.re"
- {
- ts.push_token (Token (Token::multiply, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 184 "lexer.cpp"
-yy15:
- ++cursor;
-#line 109 "lexer.re"
- {
- ts.push_token (Token (Token::plus, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 194 "lexer.cpp"
-yy17:
- yych = *++cursor;
- switch (yych) {
- case '0': goto yy37;
- default: goto yy18;
- }
-yy18:
-#line 116 "lexer.re"
- {
- ts.push_token (Token (Token::minus, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 209 "lexer.cpp"
-yy19:
- ++cursor;
-#line 130 "lexer.re"
- {
- ts.push_token (Token (Token::divide, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 219 "lexer.cpp"
-yy21:
- yych = *(marker = ++cursor);
- switch (yych) {
- case 'X':
- case 'x': goto yy38;
- default: goto yy22;
- }
-yy22:
-#line 58 "lexer.re"
- {
- ts.push_token (Token (Token::integer, lineno,
- token_start, cursor));
- token_start = cursor;
-
- continue;
- }
-#line 236 "lexer.cpp"
-yy23:
- ++cursor;
- if (limit <= cursor) return true;
- yych = *cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9': goto yy23;
- default: goto yy22;
- }
-yy25:
- yych = *++cursor;
- switch (yych) {
- case '=': goto yy40;
- default: goto yy26;
- }
-yy26:
-#line 198 "lexer.re"
- {
- ts.push_token (Token (Token::less, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 268 "lexer.cpp"
-yy27:
- ++cursor;
- if (limit <= cursor) return true;
- yych = *cursor;
-yy28:
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy29;
- }
-yy29:
-#line 212 "lexer.re"
- {
- ts.push_token (Token (Token::ident, lineno, token_start,
- cursor));
- token_start = cursor;
-
- continue;
- }
-#line 349 "lexer.cpp"
-yy30:
- yych = *++cursor;
- switch (yych) {
- case 'a': goto yy42;
- default: goto yy28;
- }
-yy31:
- yych = *++cursor;
- switch (yych) {
- case 'u': goto yy43;
- default: goto yy28;
- }
-yy32:
- yych = *++cursor;
- switch (yych) {
- case 'm': goto yy44;
- default: goto yy28;
- }
-yy33:
- yych = *++cursor;
- switch (yych) {
- case 'a': goto yy45;
- case 'o': goto yy46;
- default: goto yy28;
- }
-yy34:
- yych = *++cursor;
- switch (yych) {
- case 'o': goto yy47;
- case 'r': goto yy48;
- case 'u': goto yy49;
- default: goto yy28;
- }
-yy35:
- yych = *++cursor;
- switch (yych) {
- case 'e': goto yy50;
- default: goto yy28;
- }
-yy36:
- yych = *++cursor;
- switch (yych) {
- case 't': goto yy51;
- default: goto yy28;
- }
-yy37:
- ++cursor;
- goto yy22;
-yy38:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f': goto yy52;
- default: goto yy39;
- }
-yy39:
- cursor = marker;
- goto yy22;
-yy40:
- ++cursor;
-#line 192 "lexer.re"
- {
- ts.push_token (Token (Token::lesseq, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 437 "lexer.cpp"
-yy42:
- yych = *++cursor;
- switch (yych) {
- case 'l': goto yy55;
- default: goto yy28;
- }
-yy43:
- yych = *++cursor;
- switch (yych) {
- case 'p': goto yy56;
- default: goto yy28;
- }
-yy44:
- yych = *++cursor;
- switch (yych) {
- case 'p': goto yy58;
- default: goto yy28;
- }
-yy45:
- yych = *++cursor;
- switch (yych) {
- case 'b': goto yy60;
- default: goto yy28;
- }
-yy46:
- yych = *++cursor;
- switch (yych) {
- case 'a': goto yy61;
- default: goto yy28;
- }
-yy47:
- yych = *++cursor;
- switch (yych) {
- case 'p': goto yy62;
- default: goto yy28;
- }
-yy48:
- yych = *++cursor;
- switch (yych) {
- case 'i': goto yy64;
- default: goto yy28;
- }
-yy49:
- yych = *++cursor;
- switch (yych) {
- case 's': goto yy65;
- default: goto yy28;
- }
-yy50:
- yych = *++cursor;
- switch (yych) {
- case 'a': goto yy66;
- case 't': goto yy67;
- default: goto yy28;
- }
-yy51:
- yych = *++cursor;
- switch (yych) {
- case 'o': goto yy69;
- default: goto yy28;
- }
-yy52:
- ++cursor;
- if (limit <= cursor) return true;
- yych = *cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f': goto yy52;
- default: goto yy54;
- }
-yy54:
-#line 66 "lexer.re"
- {
- ts.push_token (Token (Token::xinteger, lineno,
- token_start, cursor));
- token_start = cursor;
-
- continue;
- }
-#line 537 "lexer.cpp"
-yy55:
- yych = *++cursor;
- switch (yych) {
- case 'l': goto yy70;
- default: goto yy28;
- }
-yy56:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy57;
- }
-yy57:
-#line 88 "lexer.re"
- {
- ts.push_token (Token (Token::dup, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 620 "lexer.cpp"
-yy58:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- case 'f': goto yy72;
- case 't': goto yy74;
- default: goto yy59;
- }
-yy59:
-#line 158 "lexer.re"
- {
- ts.push_token (Token (Token::go, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 697 "lexer.cpp"
-yy60:
- yych = *++cursor;
- switch (yych) {
- case 'e': goto yy76;
- default: goto yy28;
- }
-yy61:
- yych = *++cursor;
- switch (yych) {
- case 'd': goto yy77;
- default: goto yy28;
- }
-yy62:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy63;
- }
-yy63:
-#line 81 "lexer.re"
- {
- ts.push_token (Token (Token::pop, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 786 "lexer.cpp"
-yy64:
- yych = *++cursor;
- switch (yych) {
- case 'n': goto yy79;
- default: goto yy28;
- }
-yy65:
- yych = *++cursor;
- switch (yych) {
- case 'h': goto yy80;
- default: goto yy28;
- }
-yy66:
- yych = *++cursor;
- switch (yych) {
- case 'd': goto yy82;
- default: goto yy28;
- }
-yy67:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy68;
- }
-yy68:
-#line 172 "lexer.re"
- {
- ts.push_token (Token (Token::ret, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 881 "lexer.cpp"
-yy69:
- yych = *++cursor;
- switch (yych) {
- case 'r': goto yy84;
- default: goto yy28;
- }
-yy70:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy71;
- }
-yy71:
-#line 165 "lexer.re"
- {
- ts.push_token (Token (Token::call, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 964 "lexer.cpp"
-yy72:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy73;
- }
-yy73:
-#line 151 "lexer.re"
- {
- ts.push_token (Token (Token::gofalse, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 1041 "lexer.cpp"
-yy74:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy75;
- }
-yy75:
-#line 144 "lexer.re"
- {
- ts.push_token (Token (Token::gotrue, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 1118 "lexer.cpp"
-yy76:
- yych = *++cursor;
- switch (yych) {
- case 'l': goto yy85;
- default: goto yy28;
- }
-yy77:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy78;
- }
-yy78:
-#line 179 "lexer.re"
- {
- ts.push_token (Token (Token::load, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 1201 "lexer.cpp"
-yy79:
- yych = *++cursor;
- switch (yych) {
- case 't': goto yy87;
- default: goto yy28;
- }
-yy80:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy81;
- }
-yy81:
-#line 74 "lexer.re"
- {
- ts.push_token (Token (Token::push, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 1284 "lexer.cpp"
-yy82:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy83;
- }
-yy83:
-#line 95 "lexer.re"
- {
- ts.push_token (Token (Token::read, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 1361 "lexer.cpp"
-yy84:
- yych = *++cursor;
- switch (yych) {
- case 'e': goto yy89;
- default: goto yy28;
- }
-yy85:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy86;
- }
-yy86:
-#line 205 "lexer.re"
- {
- ts.push_token (Token (Token::label, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 1444 "lexer.cpp"
-yy87:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy88;
- }
-yy88:
-#line 102 "lexer.re"
- {
- ts.push_token (Token (Token::print, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 1521 "lexer.cpp"
-yy89:
- yych = *++cursor;
- switch (yych) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- case 'G':
- case 'H':
- case 'I':
- case 'J':
- case 'K':
- case 'L':
- case 'M':
- case 'N':
- case 'O':
- case 'P':
- case 'Q':
- case 'R':
- case 'S':
- case 'T':
- case 'U':
- case 'V':
- case 'W':
- case 'X':
- case 'Y':
- case 'Z':
- case '_':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'g':
- case 'h':
- case 'i':
- case 'j':
- case 'k':
- case 'l':
- case 'm':
- case 'n':
- case 'o':
- case 'p':
- case 'q':
- case 'r':
- case 's':
- case 't':
- case 'u':
- case 'v':
- case 'w':
- case 'x':
- case 'y':
- case 'z': goto yy27;
- default: goto yy90;
- }
-yy90:
-#line 186 "lexer.re"
- {
- ts.push_token (Token (Token::store, lineno));
- token_start = cursor;
-
- continue;
- }
-#line 1598 "lexer.cpp"
- }
-#line 243 "lexer.re"
-
- }
- return true;
- }
-
- /*!
- ** Fills up the buffer when neccessary.
- ** Note the buffer is always filled to the maximum, not just the
- ** number of bytes neccessary for the lexer to continue.
- **
- ** \param nbytes - the number of bytes
- */
-
- void Lexer::buffer_grow (size_t new_size)
- {
- char *new_buffer = new char[new_size];
-
- std::copy (buffer, limit, new_buffer);
-
- token_start = new_buffer + (token_start - buffer);
- cursor = new_buffer + (cursor - buffer);
- limit = new_buffer + new_size;
-
- buffer_size = new_size;
-
- delete [] buffer;
- buffer = new_buffer;
- }
-
- void Lexer::read (size_t nbytes)
- {
- if (token_start + nbytes > limit) { // we need larger buffer
- buffer_grow (token_start - buffer + nbytes);
- }
-
- std::copy (token_start, limit, buffer);
- cursor -= token_start - buffer;
- char *old_limit = limit - (token_start - buffer);
- token_start = buffer;
-
- file->read (old_limit, limit - old_limit);
- if (file->eof ()) {
- size_t bytes = file->gcount ();
- std::fill (old_limit + bytes, limit, '\0');
- }
- }
-
- void Lexer::buffer_init ()
- {
- file->read (buffer, buffer_size);
- if (file->eof ()) {
- size_t bytes = file->gcount ();
- std::fill (buffer + bytes, buffer + buffer_size, '\0');
- }
-
- cursor = marker = token_start = buffer;
- limit = buffer + buffer_size;
- }
-
-
- } // namespace Lexer
-
- } // namespace ASM
-} // namespace SpasmImpl
-
+/* Generated by re2c 1.1.1 on Mon Nov 12 23:00:12 2018 */
+#line 1 "spasm/src/asm/lexer.re"
+#include <iostream>
+
+#include "lexer.hpp"
+
+#include "token.hpp"
+
+namespace SpasmImpl
+{
+namespace ASM
+{
+//! Namespace for all lexical analisys classes
+namespace Lexer
+{
+Lexer::Lexer(std::istream& _file, size_t _buffer_size)
+ : file(&_file), buffer_size(_buffer_size), state(unsigned(-1)), lineno(0)
+{
+ buffer = new char[buffer_size];
+ cursor = limit = marker = token_start = NULL;
+}
+
+Lexer::~Lexer()
+{
+ delete[] buffer;
+}
+
+bool Lexer::tokenize(TokenStream& ts)
+{
+#line 43 "spasm/src/asm/lexer.re"
+
+ while (1)
+ {
+#line 41 "spasm/src/asm/lexer.cpp"
+ {
+ char yych;
+ if ((limit - cursor) < 6)
+ return true;
+ yych = *cursor;
+ switch (yych)
+ {
+ case 0x00:
+ goto yy2;
+ case '\t':
+ case ' ':
+ goto yy6;
+ case '\n':
+ goto yy9;
+ case '-':
+ goto yy11;
+ case '0':
+ goto yy12;
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ goto yy14;
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'b':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'k':
+ case 'n':
+ case 'o':
+ case 'q':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ case 'a':
+ goto yy19;
+ case 'c':
+ goto yy20;
+ case 'd':
+ goto yy21;
+ case 'j':
+ goto yy22;
+ case 'l':
+ goto yy23;
+ case 'm':
+ goto yy24;
+ case 'p':
+ goto yy25;
+ case 'r':
+ goto yy26;
+ case 's':
+ goto yy27;
+ default:
+ goto yy4;
+ }
+ yy2:
+ ++cursor;
+#line 220 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::endinput, lineno));
+
+ break;
+ }
+#line 125 "spasm/src/asm/lexer.cpp"
+ yy4:
+ ++cursor;
+ yy5:
+#line 226 "spasm/src/asm/lexer.re"
+ {
+ return false;
+ }
+#line 133 "spasm/src/asm/lexer.cpp"
+ yy6:
+ ++cursor;
+ if (limit <= cursor)
+ return true;
+ yych = *cursor;
+ switch (yych)
+ {
+ case '\t':
+ case ' ':
+ goto yy6;
+ default:
+ goto yy8;
+ }
+ yy8:
+#line 207 "spasm/src/asm/lexer.re"
+ {
+ token_start = cursor;
+
+ continue;
+ }
+#line 150 "spasm/src/asm/lexer.cpp"
+ yy9:
+ ++cursor;
+#line 213 "spasm/src/asm/lexer.re"
+ {
+ ++lineno;
+ token_start = cursor;
+
+ continue;
+ }
+#line 160 "spasm/src/asm/lexer.cpp"
+ yy11:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ goto yy28;
+ default:
+ goto yy5;
+ }
+ yy12:
+ yych = *(marker = ++cursor);
+ switch (yych)
+ {
+ case 'X':
+ case 'x':
+ goto yy29;
+ default:
+ goto yy13;
+ }
+ yy13:
+#line 58 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::integer, lineno, token_start, cursor));
+ token_start = cursor;
+
+ continue;
+ }
+#line 183 "spasm/src/asm/lexer.cpp"
+ yy14:
+ ++cursor;
+ if (limit <= cursor)
+ return true;
+ yych = *cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ goto yy14;
+ default:
+ goto yy13;
+ }
+ yy16:
+ ++cursor;
+ if (limit <= cursor)
+ return true;
+ yych = *cursor;
+ yy17:
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy18;
+ }
+ yy18:
+#line 199 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::ident, lineno, token_start, cursor));
+ token_start = cursor;
+
+ continue;
+ }
+#line 281 "spasm/src/asm/lexer.cpp"
+ yy19:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'd':
+ goto yy31;
+ default:
+ goto yy17;
+ }
+ yy20:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'a':
+ goto yy32;
+ default:
+ goto yy17;
+ }
+ yy21:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'i':
+ goto yy33;
+ case 'u':
+ goto yy34;
+ default:
+ goto yy17;
+ }
+ yy22:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'm':
+ goto yy35;
+ default:
+ goto yy17;
+ }
+ yy23:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'a':
+ goto yy36;
+ case 'e':
+ goto yy37;
+ default:
+ goto yy17;
+ }
+ yy24:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'o':
+ goto yy38;
+ case 'u':
+ goto yy39;
+ default:
+ goto yy17;
+ }
+ yy25:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'o':
+ goto yy40;
+ case 'r':
+ goto yy41;
+ case 'u':
+ goto yy42;
+ default:
+ goto yy17;
+ }
+ yy26:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'e':
+ goto yy43;
+ default:
+ goto yy17;
+ }
+ yy27:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'u':
+ goto yy44;
+ default:
+ goto yy17;
+ }
+ yy28:
+ ++cursor;
+ goto yy13;
+ yy29:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ goto yy45;
+ default:
+ goto yy30;
+ }
+ yy30:
+ cursor = marker;
+ goto yy13;
+ yy31:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'd':
+ goto yy48;
+ default:
+ goto yy17;
+ }
+ yy32:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'l':
+ goto yy50;
+ default:
+ goto yy17;
+ }
+ yy33:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'v':
+ goto yy51;
+ default:
+ goto yy17;
+ }
+ yy34:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'p':
+ goto yy53;
+ default:
+ goto yy17;
+ }
+ yy35:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'p':
+ goto yy55;
+ default:
+ goto yy17;
+ }
+ yy36:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'b':
+ goto yy57;
+ default:
+ goto yy17;
+ }
+ yy37:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'q':
+ goto yy58;
+ case 's':
+ goto yy60;
+ default:
+ goto yy17;
+ }
+ yy38:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'd':
+ goto yy61;
+ default:
+ goto yy17;
+ }
+ yy39:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'l':
+ goto yy63;
+ default:
+ goto yy17;
+ }
+ yy40:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'p':
+ goto yy65;
+ default:
+ goto yy17;
+ }
+ yy41:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'i':
+ goto yy67;
+ default:
+ goto yy17;
+ }
+ yy42:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 's':
+ goto yy68;
+ default:
+ goto yy17;
+ }
+ yy43:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'a':
+ goto yy69;
+ case 't':
+ goto yy70;
+ default:
+ goto yy17;
+ }
+ yy44:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'b':
+ goto yy72;
+ default:
+ goto yy17;
+ }
+ yy45:
+ ++cursor;
+ if (limit <= cursor)
+ return true;
+ yych = *cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ goto yy45;
+ default:
+ goto yy47;
+ }
+ yy47:
+#line 66 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::xinteger, lineno, token_start, cursor));
+ token_start = cursor;
+
+ continue;
+ }
+#line 498 "spasm/src/asm/lexer.cpp"
+ yy48:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy49;
+ }
+ yy49:
+#line 109 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::plus, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 575 "spasm/src/asm/lexer.cpp"
+ yy50:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'l':
+ goto yy74;
+ default:
+ goto yy17;
+ }
+ yy51:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy52;
+ }
+ yy52:
+#line 130 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::divide, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 658 "spasm/src/asm/lexer.cpp"
+ yy53:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy54;
+ }
+ yy54:
+#line 88 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::dup, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 735 "spasm/src/asm/lexer.cpp"
+ yy55:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ case 'f':
+ goto yy76;
+ case 't':
+ goto yy78;
+ default:
+ goto yy56;
+ }
+ yy56:
+#line 158 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::jmp, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 812 "spasm/src/asm/lexer.cpp"
+ yy57:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'e':
+ goto yy80;
+ default:
+ goto yy17;
+ }
+ yy58:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy59;
+ }
+ yy59:
+#line 179 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::lesseq, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 895 "spasm/src/asm/lexer.cpp"
+ yy60:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 's':
+ goto yy81;
+ default:
+ goto yy17;
+ }
+ yy61:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy62;
+ }
+ yy62:
+#line 137 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::modulus, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 978 "spasm/src/asm/lexer.cpp"
+ yy63:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy64;
+ }
+ yy64:
+#line 123 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::multiply, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1055 "spasm/src/asm/lexer.cpp"
+ yy65:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy66;
+ }
+ yy66:
+#line 81 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::pop, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1132 "spasm/src/asm/lexer.cpp"
+ yy67:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'n':
+ goto yy83;
+ default:
+ goto yy17;
+ }
+ yy68:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'h':
+ goto yy84;
+ default:
+ goto yy17;
+ }
+ yy69:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'd':
+ goto yy86;
+ default:
+ goto yy17;
+ }
+ yy70:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy71;
+ }
+ yy71:
+#line 172 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::ret, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1227 "spasm/src/asm/lexer.cpp"
+ yy72:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy73;
+ }
+ yy73:
+#line 116 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::minus, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1304 "spasm/src/asm/lexer.cpp"
+ yy74:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy75;
+ }
+ yy75:
+#line 165 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::call, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1381 "spasm/src/asm/lexer.cpp"
+ yy76:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy77;
+ }
+ yy77:
+#line 151 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::jmpf, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1458 "spasm/src/asm/lexer.cpp"
+ yy78:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy79;
+ }
+ yy79:
+#line 144 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::jmpt, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1535 "spasm/src/asm/lexer.cpp"
+ yy80:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 'l':
+ goto yy88;
+ default:
+ goto yy17;
+ }
+ yy81:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy82;
+ }
+ yy82:
+#line 185 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::less, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1618 "spasm/src/asm/lexer.cpp"
+ yy83:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case 't':
+ goto yy90;
+ default:
+ goto yy17;
+ }
+ yy84:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy85;
+ }
+ yy85:
+#line 74 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::push, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1701 "spasm/src/asm/lexer.cpp"
+ yy86:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy87;
+ }
+ yy87:
+#line 95 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::read, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1778 "spasm/src/asm/lexer.cpp"
+ yy88:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy89;
+ }
+ yy89:
+#line 192 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::label, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1855 "spasm/src/asm/lexer.cpp"
+ yy90:
+ yych = *++cursor;
+ switch (yych)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case 'A':
+ case 'B':
+ case 'C':
+ case 'D':
+ case 'E':
+ case 'F':
+ case 'G':
+ case 'H':
+ case 'I':
+ case 'J':
+ case 'K':
+ case 'L':
+ case 'M':
+ case 'N':
+ case 'O':
+ case 'P':
+ case 'Q':
+ case 'R':
+ case 'S':
+ case 'T':
+ case 'U':
+ case 'V':
+ case 'W':
+ case 'X':
+ case 'Y':
+ case 'Z':
+ case '_':
+ case 'a':
+ case 'b':
+ case 'c':
+ case 'd':
+ case 'e':
+ case 'f':
+ case 'g':
+ case 'h':
+ case 'i':
+ case 'j':
+ case 'k':
+ case 'l':
+ case 'm':
+ case 'n':
+ case 'o':
+ case 'p':
+ case 'q':
+ case 'r':
+ case 's':
+ case 't':
+ case 'u':
+ case 'v':
+ case 'w':
+ case 'x':
+ case 'y':
+ case 'z':
+ goto yy16;
+ default:
+ goto yy91;
+ }
+ yy91:
+#line 102 "spasm/src/asm/lexer.re"
+ {
+ ts.push_token(Token(Token::print, lineno));
+ token_start = cursor;
+
+ continue;
+ }
+#line 1932 "spasm/src/asm/lexer.cpp"
+ }
+#line 230 "spasm/src/asm/lexer.re"
+ }
+ return true;
+}
+
+/*!
+** Fills up the buffer when neccessary.
+** Note the buffer is always filled to the maximum, not just the
+** number of bytes neccessary for the lexer to continue.
+**
+** \param nbytes - the number of bytes
+*/
+
+void Lexer::buffer_grow(size_t new_size)
+{
+ char* new_buffer = new char[new_size];
+
+ std::copy(buffer, limit, new_buffer);
+
+ token_start = new_buffer + (token_start - buffer);
+ cursor = new_buffer + (cursor - buffer);
+ limit = new_buffer + new_size;
+
+ buffer_size = new_size;
+
+ delete[] buffer;
+ buffer = new_buffer;
+}
+
+void Lexer::read(size_t nbytes)
+{
+ if (token_start + nbytes > limit)
+ { // we need larger buffer
+ buffer_grow(token_start - buffer + nbytes);
+ }
+
+ std::copy(token_start, limit, buffer);
+ cursor -= token_start - buffer;
+ char* old_limit = limit - (token_start - buffer);
+ token_start = buffer;
+
+ file->read(old_limit, limit - old_limit);
+ if (file->eof())
+ {
+ size_t bytes = file->gcount();
+ std::fill(old_limit + bytes, limit, '\0');
+ }
+}
+
+void Lexer::buffer_init()
+{
+ file->read(buffer, buffer_size);
+ if (file->eof())
+ {
+ size_t bytes = file->gcount();
+ std::fill(buffer + bytes, buffer + buffer_size, '\0');
+ }
+
+ cursor = marker = token_start = buffer;
+ limit = buffer + buffer_size;
+}
+
+} // namespace Lexer
+
+} // namespace ASM
+} // namespace SpasmImpl