blob: 4fbebc7ed43692c4d23e3d05654c72b6463b5d98 [file] [log] [blame]
/* Generated by re2c 0.9.1-C on Mon Sep 10 13:55:52 2018
*/
#line 1 "./modules/parsers/gas/gas-token.re"
/*
* GAS-compatible re2c lexer
*
* Copyright (C) 2005-2007 Peter Johnson
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the author nor the names of other contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <util.h>
#include <libyasm.h>
#include "modules/parsers/gas/gas-parser.h"
#define BSIZE 8192
#define YYCURSOR cursor
#define YYLIMIT (s->lim)
#define YYMARKER (s->ptr)
#define YYFILL(n) {cursor = fill(parser_gas, cursor);}
#define RETURN(i) do {s->cur = cursor; parser_gas->tokch = s->tok[0]; \
return i;} while (0)
#define SCANINIT() {s->tok = cursor;}
#define TOK ((char *)s->tok)
#define TOKLEN (size_t)(cursor-s->tok)
/* Bridge function to convert byte-oriented parser with line-oriented
* preprocessor.
*/
static size_t
preproc_input(yasm_parser_gas *parser_gas, /*@out@*/ YYCTYPE *buf,
size_t max_size)
{
size_t tot=0;
while (max_size > 0) {
size_t n;
if (!parser_gas->line) {
parser_gas->line = yasm_preproc_get_line(parser_gas->preproc);
if (!parser_gas->line)
return tot; /* EOF */
parser_gas->linepos = parser_gas->line;
parser_gas->lineleft = strlen(parser_gas->line) + 1;
parser_gas->line[parser_gas->lineleft-1] = '\n';
}
n = parser_gas->lineleft<max_size ? parser_gas->lineleft : max_size;
strncpy((char *)buf+tot, parser_gas->linepos, n);
if (n == parser_gas->lineleft) {
yasm_xfree(parser_gas->line);
parser_gas->line = NULL;
} else {
parser_gas->lineleft -= n;
parser_gas->linepos += n;
}
tot += n;
max_size -= n;
}
return tot;
}
#if 0
static size_t
fill_input(void *d, unsigned char *buf, size_t max)
{
return yasm_preproc_input((yasm_preproc *)d, (char *)buf, max);
}
#endif
static YYCTYPE *
fill(yasm_parser_gas *parser_gas, YYCTYPE *cursor)
{
yasm_scanner *s = &parser_gas->s;
int first = 0;
if(!s->eof){
size_t cnt = s->tok - s->bot;
if(cnt){
memmove(s->bot, s->tok, (size_t)(s->lim - s->tok));
s->tok = s->bot;
s->ptr -= cnt;
cursor -= cnt;
s->lim -= cnt;
}
if (!s->bot)
first = 1;
if((s->top - s->lim) < BSIZE){
YYCTYPE *buf = yasm_xmalloc((size_t)(s->lim - s->bot) + BSIZE);
memcpy(buf, s->tok, (size_t)(s->lim - s->tok));
s->tok = buf;
s->ptr = &buf[s->ptr - s->bot];
cursor = &buf[cursor - s->bot];
s->lim = &buf[s->lim - s->bot];
s->top = &s->lim[BSIZE];
if (s->bot)
yasm_xfree(s->bot);
s->bot = buf;
}
if((cnt = preproc_input(parser_gas, s->lim, BSIZE)) == 0) {
s->eof = &s->lim[cnt]; *s->eof++ = '\n';
}
s->lim += cnt;
if (first && parser_gas->save_input) {
int i;
YYCTYPE *saveline;
parser_gas->save_last ^= 1;
saveline = parser_gas->save_line[parser_gas->save_last];
/* save next line into cur_line */
for (i=0; i<79 && &s->tok[i] < s->lim && s->tok[i] != '\n'; i++)
saveline[i] = s->tok[i];
saveline[i] = '\0';
}
}
return cursor;
}
static YYCTYPE *
save_line(yasm_parser_gas *parser_gas, YYCTYPE *cursor)
{
yasm_scanner *s = &parser_gas->s;
int i = 0;
YYCTYPE *saveline;
parser_gas->save_last ^= 1;
saveline = parser_gas->save_line[parser_gas->save_last];
/* save next line into cur_line */
if ((YYLIMIT - YYCURSOR) < 80)
YYFILL(80);
for (i=0; i<79 && &cursor[i] < s->lim && cursor[i] != '\n'; i++)
saveline[i] = cursor[i];
saveline[i] = '\0';
return cursor;
}
/* starting size of string buffer */
#define STRBUF_ALLOC_SIZE 128
/* string buffer used when parsing strings/character constants */
static YYCTYPE *strbuf = NULL;
/* length of strbuf (including terminating NULL character) */
static size_t strbuf_size = 0;
static void
strbuf_append(size_t count, YYCTYPE *cursor, yasm_scanner *s, int ch)
{
if (count >= strbuf_size) {
strbuf = yasm_xrealloc(strbuf, strbuf_size + STRBUF_ALLOC_SIZE);
strbuf_size += STRBUF_ALLOC_SIZE;
}
strbuf[count] = ch;
}
#line 188 "./modules/parsers/gas/gas-token.re"
int
gas_parser_lex(YYSTYPE *lvalp, yasm_parser_gas *parser_gas)
{
yasm_scanner *s = &parser_gas->s;
YYCTYPE *cursor = s->cur;
size_t count;
YYCTYPE savech;
/* Handle one token of lookahead */
if (parser_gas->peek_token != NONE) {
int tok = parser_gas->peek_token;
*lvalp = parser_gas->peek_tokval; /* structure copy */
parser_gas->tokch = parser_gas->peek_tokch;
parser_gas->peek_token = NONE;
return tok;
}
/* Catch EOF */
if (s->eof && cursor == s->eof)
return 0;
/* Jump to proper "exclusive" states */
switch (parser_gas->state) {
case COMMENT:
goto comment;
case SECTION_DIRECTIVE:
goto section_directive;
case NASM_FILENAME:
goto nasm_filename;
default:
break;
}
scan:
SCANINIT();
{
static unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 12, 0, 0, 0,
0, 0, 0, 0, 0, 0, 12, 0,
254, 254, 126, 126, 126, 126, 126, 126,
94, 94, 0, 0, 0, 0, 0, 0,
8, 78, 78, 78, 78, 78, 78, 14,
14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 0, 0, 0, 0, 12,
0, 78, 78, 78, 78, 78, 78, 14,
14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14,
14, 14, 14, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
#line 258 "gas-token.c"
{
YYCTYPE yych;
unsigned int yyaccept;
goto yy0;
++YYCURSOR;
yy0:
if((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
yych = *YYCURSOR;
if(yych <= '/'){
if(yych <= '#'){
if(yych <= '\r'){
if(yych <= '\t'){
if(yych <= '\b') goto yy30;
goto yy26;
} else {
if(yych <= '\n') goto yy28;
if(yych <= '\f') goto yy30;
goto yy26;
}
} else {
if(yych <= ' '){
if(yych <= '\037') goto yy30;
goto yy26;
} else {
if(yych <= '!') goto yy17;
if(yych <= '"') goto yy11;
goto yy24;
}
}
} else {
if(yych <= '*'){
if(yych <= '%'){
if(yych <= '$') goto yy17;
goto yy22;
} else {
if(yych == '\'') goto yy9;
goto yy17;
}
} else {
if(yych <= ','){
if(yych <= '+') goto yy5;
goto yy17;
} else {
if(yych <= '-') goto yy5;
if(yych <= '.') goto yy7;
goto yy18;
}
}
}
} else {
if(yych <= 'Z'){
if(yych <= '<'){
if(yych <= '9'){
if(yych >= '1') goto yy4;
goto yy2;
} else {
if(yych <= ':') goto yy17;
if(yych <= ';') goto yy19;
goto yy13;
}
} else {
if(yych <= '>'){
if(yych <= '=') goto yy17;
goto yy15;
} else {
if(yych <= '?') goto yy30;
if(yych <= '@') goto yy17;
goto yy21;
}
}
} else {
if(yych <= 'z'){
if(yych <= '^'){
if(yych <= ']') goto yy30;
goto yy17;
} else {
if(yych == '`') goto yy30;
goto yy21;
}
} else {
if(yych <= '|'){
if(yych <= '{') goto yy30;
goto yy17;
} else {
if(yych == '~') goto yy17;
goto yy30;
}
}
}
}
yy2: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych <= 'T'){
if(yych <= 'A'){
if(yych <= '/'){
if(yych == '.') goto yy90;
goto yy3;
} else {
if(yych <= '9') goto yy90;
if(yych <= ':') goto yy81;
goto yy3;
}
} else {
if(yych <= 'E'){
if(yych <= 'B') goto yy85;
if(yych >= 'D') goto yy88;
goto yy3;
} else {
if(yych <= 'F') goto yy86;
if(yych >= 'T') goto yy88;
goto yy3;
}
}
} else {
if(yych <= 'e'){
if(yych <= 'a'){
if(yych == 'X') goto yy92;
goto yy3;
} else {
if(yych <= 'b') goto yy85;
if(yych >= 'd') goto yy88;
goto yy3;
}
} else {
if(yych <= 't'){
if(yych <= 'f') goto yy86;
if(yych >= 't') goto yy88;
goto yy3;
} else {
if(yych == 'x') goto yy92;
goto yy3;
}
}
}
yy3:
#line 229 "./modules/parsers/gas/gas-token.re"
{
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
lvalp->intn = yasm_intnum_create_dec(TOK);
s->tok[TOKLEN] = savech;
RETURN(INTNUM);
}
#line 402 "gas-token.c"
yy4: yych = *++YYCURSOR;
if(yych <= 'E'){
if(yych <= ':'){
if(yych <= '9') goto yy84;
goto yy81;
} else {
if(yych == 'B') goto yy77;
goto yy84;
}
} else {
if(yych <= 'b'){
if(yych <= 'F') goto yy79;
if(yych <= 'a') goto yy84;
goto yy77;
} else {
if(yych == 'f') goto yy79;
goto yy84;
}
}
yy5: yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == '.') goto yy61;
if(yych <= '/') goto yy6;
if(yych <= '9') goto yy59;
goto yy6;
yy6:
#line 303 "./modules/parsers/gas/gas-token.re"
{ RETURN(s->tok[0]); }
#line 431 "gas-token.c"
yy7: yych = *++YYCURSOR;
if(yybm[0+yych] & 16) {
goto yy49;
}
goto yy37;
yy8:
#line 310 "./modules/parsers/gas/gas-token.re"
{
lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN);
lvalp->str.len = TOKLEN;
RETURN(ID);
}
#line 444 "gas-token.c"
yy9: yych = *++YYCURSOR;
goto yy10;
yy10:
#line 289 "./modules/parsers/gas/gas-token.re"
{
goto charconst;
}
#line 452 "gas-token.c"
yy11: yych = *++YYCURSOR;
goto yy12;
yy12:
#line 294 "./modules/parsers/gas/gas-token.re"
{
goto stringconst;
}
#line 460 "gas-token.c"
yy13: yych = *++YYCURSOR;
if(yych == '<') goto yy47;
goto yy14;
yy14:
#line 301 "./modules/parsers/gas/gas-token.re"
{ RETURN(LEFT_OP); }
#line 467 "gas-token.c"
yy15: yych = *++YYCURSOR;
if(yych == '>') goto yy45;
goto yy16;
yy16:
#line 302 "./modules/parsers/gas/gas-token.re"
{ RETURN(RIGHT_OP); }
#line 474 "gas-token.c"
yy17: yych = *++YYCURSOR;
goto yy6;
yy18: yych = *++YYCURSOR;
if(yych == '*') goto yy43;
if(yych == '/') goto yy41;
goto yy6;
yy19: yych = *++YYCURSOR;
goto yy20;
yy20:
#line 304 "./modules/parsers/gas/gas-token.re"
{
parser_gas->state = INITIAL;
RETURN(s->tok[0]);
}
#line 489 "gas-token.c"
yy21: yych = *++YYCURSOR;
goto yy37;
yy22: yych = *++YYCURSOR;
if(yybm[0+yych] & 2) {
goto yy33;
}
goto yy23;
yy23:
#line 407 "./modules/parsers/gas/gas-token.re"
{
yasm_warn_set(YASM_WARN_UNREC_CHAR,
N_("ignoring unrecognized character `%s'"),
yasm__conv_unprint(s->tok[0]));
goto scan;
}
#line 505 "gas-token.c"
yy24: yych = *++YYCURSOR;
goto yy25;
yy25:
#line 389 "./modules/parsers/gas/gas-token.re"
{
if (parser_gas->is_cpp_preproc)
{
RETURN(CPP_LINE_MARKER);
} else
goto line_comment;
}
#line 517 "gas-token.c"
yy26: yych = *++YYCURSOR;
goto yy32;
yy27:
#line 398 "./modules/parsers/gas/gas-token.re"
{ goto scan; }
#line 523 "gas-token.c"
yy28: yych = *++YYCURSOR;
goto yy29;
yy29:
#line 400 "./modules/parsers/gas/gas-token.re"
{
if (parser_gas->save_input)
cursor = save_line(parser_gas, cursor);
parser_gas->state = INITIAL;
RETURN(s->tok[0]);
}
#line 534 "gas-token.c"
yy30: yych = *++YYCURSOR;
goto yy23;
yy31: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy32;
yy32: if(yybm[0+yych] & 1) {
goto yy31;
}
goto yy27;
yy33: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy34;
yy34: if(yybm[0+yych] & 2) {
goto yy33;
}
goto yy35;
yy35:
#line 327 "./modules/parsers/gas/gas-token.re"
{
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
if (parser_gas->is_nasm_preproc && strcmp(TOK+1, "line") == 0) {
s->tok[TOKLEN] = savech;
RETURN(NASM_LINE_MARKER);
}
switch (yasm_arch_parse_check_regtmod
(p_object->arch, TOK+1, TOKLEN-1, &lvalp->arch_data)) {
case YASM_ARCH_REG:
s->tok[TOKLEN] = savech;
RETURN(REG);
case YASM_ARCH_REGGROUP:
s->tok[TOKLEN] = savech;
RETURN(REGGROUP);
case YASM_ARCH_SEGREG:
s->tok[TOKLEN] = savech;
RETURN(SEGREG);
default:
break;
}
yasm_error_set(YASM_ERROR_GENERAL,
N_("Unrecognized register name `%s'"), s->tok);
s->tok[TOKLEN] = savech;
lvalp->arch_data = 0;
RETURN(REG);
}
#line 583 "gas-token.c"
yy36: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy37;
yy37: if(yybm[0+yych] & 4) {
goto yy36;
}
if(yych != '@') goto yy8;
goto yy38;
yy38: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy39;
yy39: if(yybm[0+yych] & 8) {
goto yy38;
}
goto yy40;
yy40:
#line 317 "./modules/parsers/gas/gas-token.re"
{
/* if @ not part of ID, move the scanner cursor to the first @ */
if (!((yasm_objfmt_base *)p_object->objfmt)->module->id_at_ok)
cursor = (unsigned char *)strchr(TOK, '@');
lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN);
lvalp->str.len = TOKLEN;
RETURN(ID);
}
#line 611 "gas-token.c"
yy41: yych = *++YYCURSOR;
goto yy42;
yy42:
#line 396 "./modules/parsers/gas/gas-token.re"
{ goto line_comment; }
#line 617 "gas-token.c"
yy43: yych = *++YYCURSOR;
goto yy44;
yy44:
#line 388 "./modules/parsers/gas/gas-token.re"
{ parser_gas->state = COMMENT; goto comment; }
#line 623 "gas-token.c"
yy45: yych = *++YYCURSOR;
goto yy46;
yy46:
#line 300 "./modules/parsers/gas/gas-token.re"
{ RETURN(RIGHT_OP); }
#line 629 "gas-token.c"
yy47: yych = *++YYCURSOR;
goto yy48;
yy48:
#line 299 "./modules/parsers/gas/gas-token.re"
{ RETURN(LEFT_OP); }
#line 635 "gas-token.c"
yy49: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
goto yy50;
yy50: if(yybm[0+yych] & 16) {
goto yy49;
}
if(yych <= 'E'){
if(yych <= '.'){
if(yych == '$') goto yy36;
if(yych >= '.') goto yy36;
goto yy51;
} else {
if(yych <= '?') goto yy51;
if(yych <= '@') goto yy38;
if(yych <= 'D') goto yy36;
goto yy52;
}
} else {
if(yych <= '`'){
if(yych <= 'Z') goto yy36;
if(yych == '_') goto yy36;
goto yy51;
} else {
if(yych == 'e') goto yy52;
if(yych <= 'z') goto yy36;
goto yy51;
}
}
yy51:
#line 266 "./modules/parsers/gas/gas-token.re"
{
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
lvalp->flt = yasm_floatnum_create(TOK);
s->tok[TOKLEN] = savech;
RETURN(FLTNUM);
}
#line 674 "gas-token.c"
yy52: yyaccept = 2;
yych = *(YYMARKER = ++YYCURSOR);
if(yych <= ','){
if(yych == '+') goto yy55;
goto yy37;
} else {
if(yych <= '-') goto yy55;
if(yych <= '/') goto yy37;
if(yych >= ':') goto yy37;
goto yy53;
}
yy53: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy54;
yy54: if(yych <= '?'){
if(yych <= '-'){
if(yych == '$') goto yy36;
goto yy51;
} else {
if(yych <= '.') goto yy36;
if(yych <= '/') goto yy51;
if(yych <= '9') goto yy53;
goto yy51;
}
} else {
if(yych <= '^'){
if(yych <= '@') goto yy38;
if(yych <= 'Z') goto yy36;
goto yy51;
} else {
if(yych == '`') goto yy51;
if(yych <= 'z') goto yy36;
goto yy51;
}
}
yy55: yych = *++YYCURSOR;
if(yych <= '/') goto yy56;
if(yych <= '9') goto yy57;
goto yy56;
yy56: YYCURSOR = YYMARKER;
switch(yyaccept){
case 0: goto yy3;
case 6: goto yy91;
case 3: goto yy51;
case 4: goto yy66;
case 5: goto yy87;
case 1: goto yy6;
case 2: goto yy8;
}
yy57: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy58;
yy58: if(yych <= '/') goto yy51;
if(yych <= '9') goto yy57;
goto yy51;
yy59: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
yych = *YYCURSOR;
goto yy60;
yy60: if(yych == '.') goto yy65;
if(yych <= '/') goto yy56;
if(yych <= '9') goto yy59;
goto yy56;
yy61: yych = *++YYCURSOR;
if(yych <= '/') goto yy56;
if(yych >= ':') goto yy56;
goto yy62;
yy62: yyaccept = 3;
YYMARKER = ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
goto yy63;
yy63: if(yych <= 'D'){
if(yych <= '/') goto yy51;
if(yych <= '9') goto yy62;
goto yy51;
} else {
if(yych <= 'E') goto yy64;
if(yych != 'e') goto yy51;
goto yy64;
}
yy64: yych = *++YYCURSOR;
if(yych <= ','){
if(yych == '+') goto yy55;
goto yy56;
} else {
if(yych <= '-') goto yy55;
if(yych <= '/') goto yy56;
if(yych <= '9') goto yy57;
goto yy56;
}
yy65: yyaccept = 4;
yych = *(YYMARKER = ++YYCURSOR);
if(yych <= 'D'){
if(yych <= '/') goto yy66;
if(yych <= '9') goto yy67;
goto yy66;
} else {
if(yych <= 'E') goto yy69;
if(yych == 'e') goto yy69;
goto yy66;
}
yy66:
#line 273 "./modules/parsers/gas/gas-token.re"
{
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
lvalp->flt = yasm_floatnum_create(TOK);
s->tok[TOKLEN] = savech;
RETURN(FLTNUM);
}
#line 788 "gas-token.c"
yy67: yyaccept = 3;
YYMARKER = ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
goto yy68;
yy68: if(yych <= 'D'){
if(yych <= '/') goto yy51;
if(yych <= '9') goto yy67;
goto yy51;
} else {
if(yych <= 'E') goto yy73;
if(yych == 'e') goto yy73;
goto yy51;
}
yy69: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy56;
goto yy70;
} else {
if(yych <= '-') goto yy70;
if(yych <= '/') goto yy56;
if(yych <= '9') goto yy71;
goto yy56;
}
yy70: yych = *++YYCURSOR;
if(yych <= '/') goto yy56;
if(yych >= ':') goto yy56;
goto yy71;
yy71: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy72;
yy72: if(yych <= '/') goto yy66;
if(yych <= '9') goto yy71;
goto yy66;
yy73: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy56;
goto yy74;
} else {
if(yych <= '-') goto yy74;
if(yych <= '/') goto yy56;
if(yych <= '9') goto yy75;
goto yy56;
}
yy74: yych = *++YYCURSOR;
if(yych <= '/') goto yy56;
if(yych >= ':') goto yy56;
goto yy75;
yy75: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy76;
yy76: if(yych <= '/') goto yy51;
if(yych <= '9') goto yy75;
goto yy51;
yy77: yych = *++YYCURSOR;
goto yy78;
yy78:
#line 379 "./modules/parsers/gas/gas-token.re"
{
/* build local label name */
lvalp->str.contents = yasm_xmalloc(30);
lvalp->str.len =
sprintf(lvalp->str.contents, "L%c\001%lu", s->tok[0],
parser_gas->local[s->tok[0]-'0']);
RETURN(ID);
}
#line 857 "gas-token.c"
yy79: yych = *++YYCURSOR;
goto yy80;
yy80:
#line 369 "./modules/parsers/gas/gas-token.re"
{
/* build local label name */
lvalp->str.contents = yasm_xmalloc(30);
lvalp->str.len =
sprintf(lvalp->str.contents, "L%c\001%lu", s->tok[0],
parser_gas->local[s->tok[0]-'0']+1);
RETURN(ID);
}
#line 870 "gas-token.c"
yy81: yych = *++YYCURSOR;
goto yy82;
yy82:
#line 357 "./modules/parsers/gas/gas-token.re"
{
/* increment label index */
parser_gas->local[s->tok[0]-'0']++;
/* build local label name */
lvalp->str.contents = yasm_xmalloc(30);
lvalp->str.len =
sprintf(lvalp->str.contents, "L%c\001%lu", s->tok[0],
parser_gas->local[s->tok[0]-'0']);
RETURN(LABEL);
}
#line 885 "gas-token.c"
yy83: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
yych = *YYCURSOR;
goto yy84;
yy84: if(yych == '.') goto yy65;
if(yych <= '/') goto yy3;
if(yych <= '9') goto yy83;
goto yy3;
yy85: yych = *++YYCURSOR;
if(yybm[0+yych] & 128) {
goto yy104;
}
goto yy78;
yy86: yyaccept = 5;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == '+') goto yy96;
if(yych == '-') goto yy96;
goto yy97;
yy87:
#line 280 "./modules/parsers/gas/gas-token.re"
{
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
lvalp->flt = yasm_floatnum_create(TOK+2);
s->tok[TOKLEN] = savech;
RETURN(FLTNUM);
}
#line 913 "gas-token.c"
yy88: yyaccept = 5;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == '+') goto yy96;
if(yych == '-') goto yy96;
goto yy97;
yy89: yyaccept = 6;
YYMARKER = ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
yych = *YYCURSOR;
goto yy90;
yy90: if(yybm[0+yych] & 32) {
goto yy89;
}
if(yych == '.') goto yy65;
if(yych <= '/') goto yy91;
if(yych <= '9') goto yy59;
goto yy91;
yy91:
#line 247 "./modules/parsers/gas/gas-token.re"
{
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
lvalp->intn = yasm_intnum_create_oct(TOK);
s->tok[TOKLEN] = savech;
RETURN(INTNUM);
}
#line 940 "gas-token.c"
yy92: yych = *++YYCURSOR;
if(yybm[0+yych] & 64) {
goto yy93;
}
goto yy56;
yy93: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy94;
yy94: if(yybm[0+yych] & 64) {
goto yy93;
}
goto yy95;
yy95:
#line 256 "./modules/parsers/gas/gas-token.re"
{
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
/* skip 0 and x */
lvalp->intn = yasm_intnum_create_hex(TOK+2);
s->tok[TOKLEN] = savech;
RETURN(INTNUM);
}
#line 964 "gas-token.c"
yy96: yyaccept = 5;
YYMARKER = ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
goto yy97;
yy97: if(yych <= '9'){
if(yych == '.') goto yy98;
if(yych <= '/') goto yy87;
goto yy96;
} else {
if(yych <= 'E'){
if(yych <= 'D') goto yy87;
goto yy100;
} else {
if(yych == 'e') goto yy100;
goto yy87;
}
}
yy98: yyaccept = 5;
YYMARKER = ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
yych = *YYCURSOR;
goto yy99;
yy99: if(yych <= 'D'){
if(yych <= '/') goto yy87;
if(yych <= '9') goto yy98;
goto yy87;
} else {
if(yych <= 'E') goto yy100;
if(yych != 'e') goto yy87;
goto yy100;
}
yy100: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy56;
goto yy101;
} else {
if(yych <= '-') goto yy101;
if(yych <= '/') goto yy56;
if(yych <= '9') goto yy102;
goto yy56;
}
yy101: yych = *++YYCURSOR;
if(yych <= '/') goto yy56;
if(yych >= ':') goto yy56;
goto yy102;
yy102: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy103;
yy103: if(yych <= '/') goto yy87;
if(yych <= '9') goto yy102;
goto yy87;
yy104: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy105;
yy105: if(yybm[0+yych] & 128) {
goto yy104;
}
goto yy106;
yy106:
#line 238 "./modules/parsers/gas/gas-token.re"
{
savech = s->tok[TOKLEN];
s->tok[TOKLEN] = '\0';
lvalp->intn = yasm_intnum_create_bin(TOK+2);
s->tok[TOKLEN] = savech;
RETURN(INTNUM);
}
#line 1035 "gas-token.c"
}
}
#line 413 "./modules/parsers/gas/gas-token.re"
/* C-style comment; nesting not supported */
comment:
SCANINIT();
{
#line 1047 "gas-token.c"
{
YYCTYPE yych;
goto yy107;
++YYCURSOR;
yy107:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych == '\n') goto yy111;
if(yych != '*') goto yy113;
goto yy109;
yy109: yych = *++YYCURSOR;
if(yych == '/') goto yy114;
goto yy110;
yy110:
#line 429 "./modules/parsers/gas/gas-token.re"
{
if (cursor == s->eof)
return 0;
goto comment;
}
#line 1068 "gas-token.c"
yy111: yych = *++YYCURSOR;
goto yy112;
yy112:
#line 423 "./modules/parsers/gas/gas-token.re"
{
if (parser_gas->save_input)
cursor = save_line(parser_gas, cursor);
RETURN(s->tok[0]);
}
#line 1078 "gas-token.c"
yy113: yych = *++YYCURSOR;
goto yy110;
yy114: yych = *++YYCURSOR;
goto yy115;
yy115:
#line 421 "./modules/parsers/gas/gas-token.re"
{ parser_gas->state = INITIAL; goto scan; }
#line 1086 "gas-token.c"
}
}
#line 434 "./modules/parsers/gas/gas-token.re"
/* Single line comment. */
line_comment:
{
static unsigned char yybm[] = {
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 0, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
};
#line 1130 "gas-token.c"
{
YYCTYPE yych;
goto yy116;
yy117: ++YYCURSOR;
yy116:
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy118;
yy118: if(yybm[0+yych] & 128) {
goto yy117;
}
goto yy119;
yy119:
#line 439 "./modules/parsers/gas/gas-token.re"
{ goto scan; }
#line 1146 "gas-token.c"
}
}
#line 440 "./modules/parsers/gas/gas-token.re"
/* .section directive (the section name portion thereof) */
section_directive:
SCANINIT();
{
static unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 64, 0, 0, 0, 64, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
64, 0, 0, 0, 128, 0, 0, 0,
0, 0, 0, 0, 0, 128, 128, 0,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 0, 0, 0, 0, 0, 0,
0, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 0, 0, 0, 0, 128,
0, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
#line 1192 "gas-token.c"
{
YYCTYPE yych;
goto yy120;
++YYCURSOR;
yy120:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych <= '$'){
if(yych <= '\r'){
if(yych <= '\t'){
if(yych <= '\b') goto yy132;
goto yy126;
} else {
if(yych <= '\n') goto yy130;
if(yych <= '\f') goto yy132;
goto yy126;
}
} else {
if(yych <= '!'){
if(yych == ' ') goto yy126;
goto yy132;
} else {
if(yych <= '"') goto yy124;
if(yych <= '#') goto yy132;
goto yy122;
}
}
} else {
if(yych <= '@'){
if(yych <= '.'){
if(yych <= '+') goto yy132;
if(yych <= ',') goto yy128;
goto yy122;
} else {
if(yych <= '/') goto yy132;
if(yych >= ':') goto yy132;
goto yy122;
}
} else {
if(yych <= '_'){
if(yych <= 'Z') goto yy122;
if(yych <= '^') goto yy132;
goto yy122;
} else {
if(yych <= '`') goto yy132;
if(yych >= '{') goto yy132;
goto yy122;
}
}
}
yy122: yych = *++YYCURSOR;
goto yy137;
yy123:
#line 447 "./modules/parsers/gas/gas-token.re"
{
lvalp->str.contents = yasm__xstrndup(TOK, TOKLEN);
lvalp->str.len = TOKLEN;
parser_gas->state = INITIAL;
RETURN(ID);
}
#line 1253 "gas-token.c"
yy124: yych = *++YYCURSOR;
goto yy125;
yy125:
#line 454 "./modules/parsers/gas/gas-token.re"
{ goto stringconst; }
#line 1259 "gas-token.c"
yy126: yych = *++YYCURSOR;
goto yy135;
yy127:
#line 456 "./modules/parsers/gas/gas-token.re"
{ goto section_directive; }
#line 1265 "gas-token.c"
yy128: yych = *++YYCURSOR;
goto yy129;
yy129:
#line 458 "./modules/parsers/gas/gas-token.re"
{
parser_gas->state = INITIAL;
RETURN(s->tok[0]);
}
#line 1274 "gas-token.c"
yy130: yych = *++YYCURSOR;
goto yy131;
yy131:
#line 463 "./modules/parsers/gas/gas-token.re"
{
if (parser_gas->save_input)
cursor = save_line(parser_gas, cursor);
parser_gas->state = INITIAL;
RETURN(s->tok[0]);
}
#line 1285 "gas-token.c"
yy132: yych = *++YYCURSOR;
goto yy133;
yy133:
#line 470 "./modules/parsers/gas/gas-token.re"
{
yasm_warn_set(YASM_WARN_UNREC_CHAR,
N_("ignoring unrecognized character `%s'"),
yasm__conv_unprint(s->tok[0]));
goto section_directive;
}
#line 1296 "gas-token.c"
yy134: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy135;
yy135: if(yybm[0+yych] & 64) {
goto yy134;
}
goto yy127;
yy136: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy137;
yy137: if(yybm[0+yych] & 128) {
goto yy136;
}
goto yy123;
}
}
#line 476 "./modules/parsers/gas/gas-token.re"
/* filename portion of nasm preproc %line */
nasm_filename:
strbuf = yasm_xmalloc(STRBUF_ALLOC_SIZE);
strbuf_size = STRBUF_ALLOC_SIZE;
count = 0;
nasm_filename_scan:
SCANINIT();
{
static unsigned char yybm[] = {
0, 0, 0, 0, 0, 0, 0, 0,
0, 128, 0, 0, 0, 128, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
128, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
};
#line 1363 "gas-token.c"
{
YYCTYPE yych;
goto yy138;
++YYCURSOR;
yy138:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych <= '\f'){
if(yych <= '\b') goto yy144;
if(yych <= '\t') goto yy142;
if(yych >= '\v') goto yy144;
goto yy140;
} else {
if(yych <= '\r') goto yy142;
if(yych == ' ') goto yy142;
goto yy144;
}
yy140: yych = *++YYCURSOR;
goto yy141;
yy141:
#line 488 "./modules/parsers/gas/gas-token.re"
{
strbuf_append(count++, cursor, s, '\0');
lvalp->str.contents = (char *)strbuf;
lvalp->str.len = count;
parser_gas->state = INITIAL;
RETURN(STRING);
}
#line 1392 "gas-token.c"
yy142: yych = *++YYCURSOR;
goto yy147;
yy143:
#line 496 "./modules/parsers/gas/gas-token.re"
{ goto nasm_filename_scan; }
#line 1398 "gas-token.c"
yy144: yych = *++YYCURSOR;
goto yy145;
yy145:
#line 498 "./modules/parsers/gas/gas-token.re"
{
if (cursor == s->eof) {
strbuf_append(count++, cursor, s, '\0');
lvalp->str.contents = (char *)strbuf;
lvalp->str.len = count;
parser_gas->state = INITIAL;
RETURN(STRING);
}
strbuf_append(count++, cursor, s, s->tok[0]);
goto nasm_filename_scan;
}
#line 1414 "gas-token.c"
yy146: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy147;
yy147: if(yybm[0+yych] & 128) {
goto yy146;
}
goto yy143;
}
}
#line 509 "./modules/parsers/gas/gas-token.re"
/* character constant values */
charconst:
/*TODO*/
/* string constant values */
stringconst:
strbuf = yasm_xmalloc(STRBUF_ALLOC_SIZE);
strbuf_size = STRBUF_ALLOC_SIZE;
count = 0;
stringconst_scan:
SCANINIT();
{
#line 1443 "gas-token.c"
{
YYCTYPE yych;
goto yy148;
++YYCURSOR;
yy148:
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if(yych == '"') goto yy152;
if(yych != '\\') goto yy154;
goto yy150;
yy150: yych = *++YYCURSOR;
if(yych != '\n') goto yy155;
goto yy151;
yy151:
#line 547 "./modules/parsers/gas/gas-token.re"
{
if (cursor == s->eof) {
yasm_error_set(YASM_ERROR_SYNTAX,
N_("unexpected end of file in string"));
lvalp->str.contents = (char *)strbuf;
lvalp->str.len = count;
RETURN(STRING);
}
strbuf_append(count++, cursor, s, s->tok[0]);
goto stringconst_scan;
}
#line 1470 "gas-token.c"
yy152: yych = *++YYCURSOR;
goto yy153;
yy153:
#line 539 "./modules/parsers/gas/gas-token.re"
{
strbuf_append(count, cursor, s, '\0');
yasm_unescape_cstring(strbuf, &count);
lvalp->str.contents = (char *)strbuf;
lvalp->str.len = count;
RETURN(STRING);
}
#line 1482 "gas-token.c"
yy154: yych = *++YYCURSOR;
goto yy151;
yy155: yych = *++YYCURSOR;
goto yy156;
yy156:
#line 526 "./modules/parsers/gas/gas-token.re"
{
if (cursor == s->eof) {
yasm_error_set(YASM_ERROR_SYNTAX,
N_("unexpected end of file in string"));
lvalp->str.contents = (char *)strbuf;
lvalp->str.len = count;
RETURN(STRING);
}
strbuf_append(count++, cursor, s, '\\');
strbuf_append(count++, cursor, s, s->tok[1]);
goto stringconst_scan;
}
#line 1501 "gas-token.c"
}
}
#line 558 "./modules/parsers/gas/gas-token.re"
}