53 setArray(NULL), setSize(0), size(16), freeState(1), currentPos(0), minimal(false)
55 int bytes =
sizeof(int)*
size;
57 ch = (
int*) malloc(bytes);
58 next1 = (
int*) malloc(bytes);
59 next2 = (
int*) malloc(bytes);
93 if (this->
final != -1)
97 setState(this->
final, 0x00, this->
final+1, this->
final+1);
123 memset(
ch, 0x00,
sizeof(
int)*
size);
173 printf(
"S\tT\t1\t2\n");
176 if ((
unsigned int)
next1[i] < 32000)
185 printf(
"set %d\t",(
ch[i] & 0x0fff0000) >> 16);
188 printf(
"nset %d\t",(
ch[i] & 0x0fff0000) >> 16);
194 printf(
"%c\t",
ch[i]);
206 printf(
"%d\n",
next1[i]);
389 char stringBuffer[64];
393 bool orExpression = t1!=t2;
400 stringBuffer[i] =
regexp[tempPos];
405 if (
regexp[tempPos] == 0x00)
409 stringBuffer[i] = 0x00;
410 i = atoi(stringBuffer) - 1;
459 int transition =
SET;
463 char *range = (
char*) malloc(
sizeof(
char)*length);
465 int (__cdecl *func)(int) = NULL;
467 int (*func)(int) = NULL;
476 while (*ptr && *ptr !=
']') {
480 if (*ptr ==
'-' && i) {
481 char b=ptr[-1], e=ptr[1];
490 for (
char c=b+1;c<=e;c++) {
493 range = (
char*) realloc(range,length*2);
499 else if (*ptr ==
'\\') {
502 if (
checkRange(range,i,*ptr)) range[i++] = *ptr;
504 range = (
char*) realloc(range,length*2);
510 else if (*ptr ==
':') {
514 while (len<15 && *ptr && *ptr !=
':')
515 buffer[len++] = *ptr++;
521 buffer[len] = toupper((
int) buffer[len]);
525 if (!strcmp(buffer,
"ALPHA"))
528 else if (!strcmp(buffer,
"LOWER"))
531 else if (!strcmp(buffer,
"UPPER"))
534 else if (!strcmp(buffer,
"ALNUM"))
537 else if (!strcmp(buffer,
"DIGIT"))
540 else if (!strcmp(buffer,
"XDIGIT"))
543 else if (!strcmp(buffer,
"BLANK")) {
545 if (
checkRange(range,i,
' ')) range[i++] =
' ';
547 range = (
char*) realloc(range,length*2);
551 if (
checkRange(range,i,0x09)) range[i++] = 0x09;
553 range = (
char*) realloc(range,length*2);
558 else if (!strcmp(buffer,
"SPACE"))
561 else if (!strcmp(buffer,
"CNTRL"))
564 else if (!strcmp(buffer,
"PRINT"))
567 else if (!strcmp(buffer,
"PUNCT"))
570 else if (!strcmp(buffer,
"GRAPH"))
584 range = (
char*) realloc(range,length*2);
593 if (
checkRange(range,i,*ptr)) range[i++] = *ptr;
596 range = (
char*) realloc(range,length*2);
629 while (
size <= position) {
632 ch = (
int*) realloc(
ch,
size*
sizeof(
int));
636 ch[position] = transition;
637 next1[position] = state1;
638 next2[position] = state2;
651 for (
int i=0;i<length;i++)
681 for ( i=0; i<strlen(range); i++)
701 int state =
next1[0];
712 printf(
"double queue dump:\n");
717 if (
minimal ==
true && j == N)
break;
719 printf(
"consume %2d %c\n",j,a[j]);
725 switch (
ch[state] &
SCAN) {
730 if (n1 != n2) dq.
push(n2);
734 set = (
ch[state] & 0x0fff0000)>>16;
736 found = (
ch[state]&
NOT)?
true:
false;
738 for (i=1; i<=len; i++) {
754 if (
ch[state] == (
int) a[j]) {
758 if (
ch[state] == (
int) 0) {
765 printf(
"dq is %s\n",dq.
isEmpty()?
"empty":
"NOT empty");
770 if (dq.
isEmpty() || (j>(N+1)) )
break;
779 return state==
EOP?1:0;
int checkRange(char *, int, char)
int match(const char *, int)
void setState(int, int, int, int)
@ E_ILLEGAL_SYMBOLIC_NAME