28 #define DEBUG(x) do { x ; } while (0)
52 v->
type = VALUE_TYPE_INTEGER;
65 v->
type = VALUE_TYPE_STRING;
76 if (v->
type == VALUE_TYPE_STRING)
83 static void valueDump(
const char *msg,
Value v, FILE *fp)
87 fprintf(fp,
"%s ", msg);
89 if (v->
type == VALUE_TYPE_INTEGER)
90 fprintf(fp,
"INTEGER %d\n", v->
data.
i);
92 fprintf(fp,
"STRING '%s'\n", v->
data.
s);
94 fprintf(fp,
"NULL\n");
98 #define valueIsInteger(v) ((v)->type == VALUE_TYPE_INTEGER)
99 #define valueIsString(v) ((v)->type == VALUE_TYPE_STRING)
100 #define valueSameType(v1,v2) ((v1)->type == (v2)->type)
123 #define TOK_INTEGER 2
125 #define TOK_IDENTIFIER 4
128 #define TOK_MULTIPLY 7
131 #define TOK_CLOSE_P 10
139 #define TOK_LOGICAL_AND 18
140 #define TOK_LOGICAL_OR 19
143 #define EXPRBUFSIZ BUFSIZ
145 #if defined(DEBUG_PARSER)
146 typedef struct exprTokTableEntry {
151 ETTE_t exprTokTable[] = {
174 static const char *prToken(
int val)
179 for (et = exprTokTable; et->name != NULL; et++) {
291 while (*p && (
xisalnum(*p) || *p ==
'_'))
299 }
else if (*p ==
'\"') {
304 while (*p && *p !=
'\"')
321 DEBUG(printf(
"rdToken: \"%s\" (%d)\n", prToken(token), token));
344 DEBUG(printf(
"doPrimary()\n"));
411 DEBUG(valueDump(
"doPrimary:", v, stdout));
426 DEBUG(printf(
"doMultiplyDivide()\n"));
480 DEBUG(printf(
"doAddSubtract()\n"));
542 DEBUG(printf(
"doRelational()\n"));
592 const char * s1 = v1->
data.
s;
593 const char * s2 = v2->
data.
s;
597 r = (strcmp(s1,s2) == 0);
600 r = (strcmp(s1,s2) != 0);
603 r = (strcmp(s1,s2) < 0);
606 r = (strcmp(s1,s2) <= 0);
609 r = (strcmp(s1,s2) > 0);
612 r = (strcmp(s1,s2) >= 0);
636 DEBUG(printf(
"doLogical()\n"));
685 DEBUG(printf(
"parseExprBoolean(?, '%s')\n", expr));
708 DEBUG(valueDump(
"parseExprBoolean:", v, stdout));
711 case VALUE_TYPE_INTEGER:
712 result = v->
data.
i != 0;
714 case VALUE_TYPE_STRING:
715 result = v->
data.
s[0] !=
'\0';
732 DEBUG(printf(
"parseExprString(?, '%s')\n", expr));
755 DEBUG(valueDump(
"parseExprString:", v, stdout));
758 case VALUE_TYPE_INTEGER: {
760 sprintf(buf,
"%d", v->
data.
i);
763 case VALUE_TYPE_STRING: