%option noyywrap

/* itbl-lex.l
   Copyright (C) 1997-2021 Free Software Foundation, Inc.

   This file is part of GAS, the GNU Assembler.

   GAS is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   GAS is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with GAS; see the file COPYING.  If not, write to the Free
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
   02110-1301, USA.  */

%{
#include "itbl-lex.h"
#include <itbl-parse.h>

#ifdef DEBUG
#define DBG(x) printf x
#define MDBG(x) printf x
#else
#define DBG(x)
#define MDBG(x)
#endif

int insntbl_line = 1;
%}

ALNUM	[A-Za-z0-9_]
DIGIT	[0-9]
ALPHA	[A-Za-z_]
HEX	[0-9A-Fa-f]

%%

"creg"|"CREG" {
    return CREG;
  }
"dreg"|"DREG" {
    return DREG;
  }
"greg"|"GREG" {
    return GREG;
  }
"immed"|"IMMED" {
    return IMMED;
  }
"addr"|"ADDR" {
    return ADDR;
  }
"insn"|"INSN" {
    return INSN;
  }
"p"{DIGIT} {
    yytext[yyleng] = 0;
    yylval.processor = strtoul (yytext+1, 0, 0);
    return PNUM;
  }
{DIGIT}+ {
    yytext[yyleng] = 0;
    yylval.num = strtoul (yytext, 0, 0);
    return NUM;
  }
"0x"{HEX}+ {
    yytext[yyleng] = 0;
    yylval.num = strtoul (yytext, 0, 0);
    return NUM;
  }
{ALPHA}{ALNUM}*	{
    yytext[yyleng] = 0;
    yylval.str = strdup (yytext);
    return ID;
  }
";"|"#"	{
    int c;
    while ((c = input ()) !=  EOF)
      {
        if (c ==  '\n')
    	{
    		unput (c);
    		break;
    	}
      }
  }
"\n"	{
    insntbl_line++;
    MDBG (("in lex, NL = %d (x%x)\n", NL, NL));
    return NL;
  }
" "|"\t" {
  }
. {
    MDBG (("char = %x, %d\n", yytext[0], yytext[0]));
    return yytext[0];
  }
%%
