Warning, /frameworks/kservice/src/services/lex.l is written in an unsupported language. File is not indexed.

0001 %{
0002 #define yywrap kiotraderwrap
0003 
0004 #include "yacc.h"
0005 #include <string.h>
0006 #include <stdlib.h>
0007 #define YY_NO_UNPUT
0008 
0009 char* KTraderParse_putSymbol( char *_name );
0010 char *KTraderParse_putSymbolInBrackets( char *_name );
0011 char* KTraderParse_putString( char *_name );
0012 double KTraderParse_putSimplePositiveFloat( char *_name );
0013 int yywrap();
0014 int kiotraderlex(YYSTYPE * yylval, yyscan_t scanner);
0015 void KTraderParse_initFlex( const char *_code, yyscan_t _scanner );
0016 
0017 %}
0018 %option nomain
0019 %option never-interactive
0020 %option noalways-interactive
0021 %option nostack
0022 %option reentrant
0023 %option bison-bridge
0024 
0025 DIGIT    [0-9]
0026 
0027 %%
0028 
0029 "==" { return EQ; }
0030 "=~" { return EQI; }
0031 "!=" { return NEQ; }
0032 "!~" { return NEQI; }
0033 "<" { return LE; }
0034 ">" { return GR; }
0035 "<=" { return LEQ; }
0036 ">=" { return GEQ; }
0037 "~~" { return MATCH_INSENSITIVE; }
0038 "subseq" { return MATCH_SUBSEQUENCE; }
0039 "~subseq" { return MATCH_SUBSEQUENCE_INSENSITIVE; }
0040 "not" { return NOT; }
0041 "and" { return AND; }
0042 "or" { return OR; }
0043 "in" { return TOKEN_IN; }
0044 "~in" { return TOKEN_IN_INSENSITIVE; }
0045 "subin" { return TOKEN_IN_SUBSTRING; }
0046 "~subin" { return TOKEN_IN_SUBSTRING_INSENSITIVE; }
0047 "exist" { return EXIST; }
0048 "max" { return MAX; }
0049 "min" { return MIN; }
0050 
0051 "~"|"/"|"+"|"-"|"="|"*"|"("|")"|","  { yylval->name = 0L; return (int)(*yytext); }
0052 
0053 "TRUE" { yylval->valb = 1; return VAL_BOOL; }
0054 "FALSE" { yylval->valb = 0; return VAL_BOOL; }
0055 
0056 "'"[^']*"'" { yylval->name = KTraderParse_putString( yytext ); return VAL_STRING; }
0057 
0058 "-"{DIGIT}+  { yylval->vali = atoi( yytext ); return VAL_NUM; }
0059 {DIGIT}+  { yylval->vali = atoi( yytext ); return VAL_NUM; }
0060 
0061 {DIGIT}*"\."{DIGIT}+ { yylval->vald = KTraderParse_putSimplePositiveFloat( yytext ); return VAL_FLOAT; }
0062 
0063 \[[a-zA-Z][a-zA-Z0-9\-]*\] { yylval->name = KTraderParse_putSymbolInBrackets( yytext ); return VAL_ID; }
0064 
0065 [a-zA-Z][a-zA-Z0-9]* { yylval->name = KTraderParse_putSymbol( yytext ); return VAL_ID; }
0066 
0067 [ \t\n]+          /* eat up whitespace */
0068 
0069 . { printf( "Unrecognized character: %s\n", yytext ); }
0070 
0071 %%
0072 
0073 char* KTraderParse_putSymbolInBrackets( char *_name )
0074 {
0075   int l = strlen( _name )-1;
0076   char *p = (char *)malloc( l );
0077   if (p != NULL)
0078   {
0079     strncpy( p, _name+1, l-1 );
0080     p[l-1] = 0;
0081   }
0082 
0083   return p;
0084 }
0085 
0086 char *KTraderParse_putSymbol( char *_name )
0087 {
0088   char *p = (char*)malloc( strlen( _name ) + 1 );
0089   if (p != NULL)
0090   {
0091       strcpy( p, _name );
0092   }
0093   return p;
0094 }
0095 
0096 char* KTraderParse_putString( char *_str )
0097 {
0098   int l = strlen( _str );
0099   char *p = (char*)malloc( l );
0100   char *s = _str + 1;
0101   char *d = p;
0102 
0103   if (p == NULL)
0104     return NULL;
0105 
0106   while ( s != _str + l - 1 )
0107   {
0108      if ( *s != '\\' )
0109         *d++ = *s++;
0110      else
0111      {
0112         s++;
0113         if ( s != _str + l - 1 )
0114         {
0115           if ( *s == '\\' )
0116              *d++ = '\\';
0117            else if ( *s == 'n' )
0118              *d++ = '\n';
0119            else if ( *s == 'r' )
0120              *d++ = '\r';
0121            else if ( *s == 't' )
0122              *d++ = '\t';
0123            s++;
0124         }
0125      }
0126   }
0127   *d = 0;
0128   return p;
0129 }
0130 
0131 /* Sufficient replacement for atof() to parse [0-9]*\.[0-9]+
0132    because atof() consults locale for decimal separator,
0133    while we need it always to be the dot. */
0134 double KTraderParse_putSimplePositiveFloat( char *_str )
0135 {
0136   char *p;
0137   int f, g, d;
0138 
0139   f = 0;
0140   p = _str;
0141   while ( *p >= '0' && *p <= '9' )
0142   {
0143     f = f * 10 + ( *p - '0' );
0144     p++;
0145   }
0146   if ( *p != '.' )
0147     return (double) f;
0148   p++;
0149   g = 0;
0150   d = 1;
0151   while ( *p >= '0' && *p <= '9' )
0152   {
0153     g = g * 10 + ( *p - '0' );
0154     d *= 10;
0155     p++;
0156   }
0157   return ( (double) ( f * d + g ) ) / d;
0158 }
0159 
0160 void KTraderParse_initFlex( const char *_code, yyscan_t _scanner )
0161 {
0162   yy_switch_to_buffer( yy_scan_string( _code, _scanner ), _scanner );
0163 }
0164 
0165 int yywrap( yyscan_t _scanner )
0166 {
0167   struct yyguts_t * yyg = (struct yyguts_t*)_scanner;
0168   yy_delete_buffer( YY_CURRENT_BUFFER, _scanner );
0169   return 1;
0170 }