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 }