/*
 * LEX Specification for a VERY Simple Serial Protocol Interpreter
 */

/* Definitions Section.
 * Definitions required by the rules section are in here prior to first
 * "%%" seperator
 */

/* Include code between "%{ %}" separators at top of generated lexer source file
 */
%{

/* Use yacc command line switch to generate "y.tab.h" file */
#include "y.tab.h"
#include "G168_UART_Interface.h"

#include <stdlib.h>
#include <string.h>

%}

/* At end-of-file return assuming no more files to scan*/
%option noyywrap

/* Optimise lexer for interactive use */
/*%option always-interactive*/
%option never-interactive

/* Define some common patterns for use below */
whitespace  [ \t\r\n]
digit       [0-9]
hex			0?[xX][0-9a-fA-F]{1,50}
integer     [+-]?{digit}{1,10}
string      [_a-zA-Z0-9]{1,50}

/* Rules Section.
 * All rules are in here prior to second "%%" seperator
 */

%%

G168_CONFIG|CONFIG {
	//fprintf(stderr,"\nlex: %s;", yytext);
    return G168_CONFIG;
    }

FREEZE {
	//fprintf(stderr,"\nlex: %s;", yytext);
    return FREEZE;
    }

NLP_SUPP_THRESH {
                  //fprintf(stderr,"\nlex: %s;", yytext);
                  return NLP_SUPP_THRESH;
                }

NLP_GAIN    {
              //fprintf(stderr,"\nlex: %s;", yytext);
              return NLP_GAIN;
            }

LEAK_RATE_THRESH  {
                    //fprintf(stderr,"\nlex: %s;", yytext);
                    return LEAK_RATE_THRESH;
                  }

NLP_ENABLE  {
              //fprintf(stderr,"\nlex: %s;", yytext);
              return NLP_ENABLE;
            }

ENABLE      {
              //fprintf(stderr,"\nlex: %s;", yytext);
              return ENABLE;
            }

RIN_BUFF_LEN  {
                //fprintf(stderr,"\nlex: %s;", yytext);
                return RIN_BUFF_LEN;
              }

RIN_BUFF_BASE {
                //fprintf(stderr,"\nlex: %s;", yytext);
                return RIN_BUFF_BASE;
              }

SIN_BUFF_LEN  {
                //fprintf(stderr,"\nlex: %s;", yytext);
                return SIN_BUFF_LEN;
              }

SIN_BUFF_BASE {
                //fprintf(stderr,"\nlex: %s;", yytext);
                return SIN_BUFF_BASE;
              }

SOUT_BUFF_LEN  {
                //fprintf(stderr,"\nlex: %s;", yytext);
                return SOUT_BUFF_LEN;
              }

SOUT_BUFF_BASE {
                //fprintf(stderr,"\nlex: %s;", yytext);
                return SOUT_BUFF_BASE;
              }

SET_COEFFS    {
                //fprintf(stderr,"\nlex: %s;", yytext);
                return SET_COEFFS;
              }

G168_STATUS|STATUS {
                //fprintf(stderr,"\nlex: %s;", yytext);
                return G168_STATUS;
              }

LAST_ERROR  {
              //fprintf(stderr,"\nlex: %s;", yytext);
              return LAST_ERROR;
            }

VERSION     {
              //fprintf(stderr,"\nlex: %s;", yytext);
              return VERSION;
            }

DOUBLE_TALK_DETECTED  {
                        //fprintf(stderr,"\nlex: %s;", yytext);
                        return DOUBLE_TALK_DETECTED;
                      }

CONVERGED   {
              //fprintf(stderr,"\nlex: %s;", yytext);
              return CONVERGED;
            }

READ_COEFFS {
              //fprintf(stderr,"\nlex: %s;", yytext);
              return READ_COEFFS;
            }
ALL	{
	              //fprintf(stderr,"\nlex: %s;", yytext);
	return ALL;
}
            
TEST        {
              //fprintf(stderr,"\nlex: %s;", yytext);
              return TEST;
            }
COMET_READ_REG {
              ////fprintf(stderr,"\nlex: %s;", yytext);
	return COMET_READ_REG;
}

COMET_WRITE_REG {
	              ////fprintf(stderr,"\nlex: %s;", yytext);
	return COMET_WRITE_REG;
}

READ_MEM_8 {
              ////fprintf(stderr,"\nlex: %s;", yytext);
	return READ_MEM_8;
}

READ_MEM_16 {
              ////fprintf(stderr,"\nlex: %s;", yytext);
	return READ_MEM_16;
}
READ_MEM_32 {
              ////fprintf(stderr,"\nlex: %s;", yytext);
	return READ_MEM_32;
}

WRITE_MEM_8 {
	              ////fprintf(stderr,"\nlex: %s;", yytext);
	return WRITE_MEM_8;
}

WRITE_MEM_16 {
	              ////fprintf(stderr,"\nlex: %s;", yytext);
	return WRITE_MEM_16;
}

WRITE_MEM_32 {
	              ////fprintf(stderr,"\nlex: %s;", yytext);
	return WRITE_MEM_32;
}

{integer}   {
              yylval = atoi(yytext);
              ////fprintf(stderr,"\nlex: {integer} = %d;", yylval);
              return INTEGER;
            }
{hex}		{
				sscanf(yytext, "%x", &yylval);
              ////fprintf(stderr,"\nlex: {hex} = 0x%x;", yylval);

	return INTEGER;
}
RANGE	{
	              ////fprintf(stderr,"\nlex: %s;", yytext);
	return RANGE;	
}
-		{
              ////fprintf(stderr,"\nlex: -;");

	DASH;
}

.		{
              //fprintf(stderr,"\nlex: {any} = %s;", yytext);
              //return NOTHING;
}
%%
/* User code section.
 * All text beyond the second "%%" seperator is added to the end of the
 * generated lexer s\ource file
 */

















