Warning, /graphics/kst-plot/src/libkstmath/escan.l is written in an unsupported language. File is not indexed.
0001 %option noyywrap
0002 %x DATA
0003 %{
0004 #include <stdlib.h>
0005 #include <stdio.h>
0006 #include <string.h>
0007 #include "eparse.h"
0008 #include "eparse-eh.h"
0009
0010 int bracketCount = 0;
0011 char dataSpec[1024];
0012 char *dataSpecPtr;
0013 //void yyerror(Kst::ObjectStore *store, const char *s);
0014 #define YY_DECL int yylex(Kst::ObjectStore *store)
0015
0016 %}
0017
0018 Number (0|[1-9][0-9]*)([\.][0-9]+)?([eE][\+\-]?[0-9]+)?
0019 Id [A-Za-z]+
0020
0021 %%
0022
0023 {Number} {
0024 yylval.number = atof(yytext);
0025 /*printf("Found a number %.15f\n", yylval.number);*/
0026 return T_NUMBER;
0027 }
0028
0029
0030 {Id} {
0031 yylval.data = strdup(yytext);
0032 /*printf("Found an ID [%s]\n", yylval.data);*/
0033 return T_IDENTIFIER;
0034 }
0035
0036 <DATA>. {
0037 switch (*yytext) {
0038 case '[':
0039 ++bracketCount;
0040 *dataSpecPtr = *yytext;
0041 ++dataSpecPtr;
0042 break;
0043 case ']':
0044 if (--bracketCount == 0) {
0045 *dataSpecPtr = 0;
0046 yylval.data = strdup(dataSpec);
0047 if (dataSpecPtr == dataSpec) {
0048 yyerror(store, "Empty data reference.");
0049 yy_flush_buffer(YY_CURRENT_BUFFER);
0050 BEGIN(INITIAL);
0051 return T_INVALID;
0052 }
0053 BEGIN(INITIAL);
0054 return T_DATA;
0055 }
0056 *dataSpecPtr = *yytext;
0057 ++dataSpecPtr;
0058 break;
0059 default:
0060 *dataSpecPtr = *yytext;
0061 ++dataSpecPtr;
0062 break;
0063 }
0064 }
0065
0066 <DATA><<EOF>> {
0067 yyerror(store, "Invalid data reference.");
0068 yy_flush_buffer(YY_CURRENT_BUFFER);
0069 BEGIN(INITIAL);
0070 return T_INVALID;
0071 }
0072
0073 "[" {
0074 bracketCount = 1;
0075 dataSpecPtr = dataSpec;
0076 *dataSpecPtr = 0;
0077 BEGIN(DATA);
0078 }
0079
0080 "]" {
0081 yyerror(store, "Unmatched ']'.");
0082 yy_flush_buffer(YY_CURRENT_BUFFER);
0083 return T_INVALID;
0084 }
0085
0086 "!" return T_NOT;
0087
0088 "&" return T_AND;
0089
0090 "|" return T_OR;
0091
0092 "&&" return T_LAND;
0093
0094 "||" return T_LOR;
0095
0096 "<" return T_LT;
0097
0098 "<=" return T_LE;
0099
0100 ">" return T_GT;
0101
0102 ">=" return T_GE;
0103
0104 "=" return T_EQ;
0105
0106 "==" return T_EQ;
0107
0108 "!=" return T_NE;
0109
0110 "+" return T_ADD;
0111
0112 "-" return T_SUBTRACT;
0113
0114 "*" return T_MULTIPLY;
0115
0116 "/" return T_DIVIDE;
0117
0118 "%" return T_MOD;
0119
0120 "^" return T_EXP;
0121
0122 "(" return T_OPENPAR;
0123
0124 ")" return T_CLOSEPAR;
0125
0126 "," return T_COMMA;
0127
0128 [ \t] {}
0129
0130 . {
0131 /*printf("Found char '%c'\n", yytext[0]);*/
0132 yylval.character = yytext[0];
0133 return T_INVALID;
0134 }
0135
0136
0137 <<EOF>> {
0138 /*printf("yyterminate\n");*/
0139 yyterminate();
0140 }
0141
0142 %%
0143