#define FALSE 0
#endif /* TRUE */
+/*
+ * Type used by cupl for representing a CUPL scalar.
+ * Should be a floating-point type, e.g. float, double, long float, etc.
+ * Also, you must define here the function used to read scalars.
+ */
+typedef double scalar;
+#define atos(s) atof(s)
+
/*
* This is the node structure for parse trees.
*/
struct edon *right;
} n;
- double numval; /* for numbers */
+ scalar numval; /* for numbers */
char *string; /* for string literals */
static lvar *idlist;
-static node *intern_number(double);
+static node *intern_number(char *);
static node *intern_identifier(char *);
static node *intern_string(char *);
%}
"*DATA" {return(DATA);}
[A-Z][A-Z0-9]* {yylval.node = intern_identifier(yytext); return(IDENTIFIER);}
--?{N}E-?{D} {yylval.node = intern_number(atof(yytext)); return(NUMBER);}
--?{N} {yylval.node = intern_number(atof(yytext)); return(NUMBER);}
+-?{N}E-?{D} {yylval.node = intern_number(yytext); return(NUMBER);}
+-?{N} {yylval.node = intern_number(yytext); return(NUMBER);}
'[^']*' {yylval.node = intern_string(yytext); return(STRING);}
"**" {return(POWER);}
return(new);
}
-static node *intern_number(double numval)
+static node *intern_number(char *str)
{
node *new;
+ scalar numval = atos(str); /* see cupl.h */
/* get a node */
if ((new = (node *)malloc(sizeof(node))) == (node *)NULL)