/* itbl-lex.l
   Copyright (C) 1997  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 2, 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, 59 Temple Place - Suite 330, Boston, MA
   02111-1307, USA.  */

%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.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];
  }
%%

#ifndef yywrap
int 
yywrap () 
  { 
    return 1; 
  }
#endif
