=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/scanner2.c,v retrieving revision 1.4 retrieving revision 1.9 diff -u -p -r1.4 -r1.9 --- OpenXM/src/kan96xx/Kan/scanner2.c 2004/09/10 13:20:23 1.4 +++ OpenXM/src/kan96xx/Kan/scanner2.c 2005/07/18 10:55:16 1.9 @@ -1,9 +1,11 @@ -/* $OpenXM: OpenXM/src/kan96xx/Kan/scanner2.c,v 1.3 2001/05/04 01:06:25 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kan96xx/Kan/scanner2.c,v 1.8 2005/07/03 11:08:54 ohara Exp $ */ /* scanner2.c (SM StackMachine) */ /* export: struct tokens decompostToTokens(char *str,int *sizep); scanner2.c is for getting tokens from a string. */ #include +#include +#include #include "datatype.h" #include "stackm.h" struct tokens lookupTokens(struct tokens t); @@ -56,6 +58,10 @@ static isKakkoSM(); static isSymbolSM(); static struct tokens getokenSM2(); +extern int ScannerWhich; +extern unsigned char ScannerBuf[]; +extern int ScannerPt; + /**************** code part of lexical analizer ********************/ struct tokens *decomposeToTokens(str,sizep) @@ -97,7 +103,20 @@ static int getSM() /* get a letter from StringSM */ { int c; - c = StringSM[StrpSM++]; + + if ((StrpSM > 0) && (StringSM[StrpSM] == ',') && (StringSM[StrpSM-1] == ',')) { int i; + fprintf(stderr,"Warning: ,, is found: "); + for (i=(StrpSM-30>0?StrpSM-30:0); i<=StrpSM; i++) { + fprintf(stderr,"%c",StringSM[i]); + } + fprintf(stderr,"\n"); + } + + c = (unsigned char) StringSM[StrpSM++]; + if (c != 0) { + ScannerPt++; if (ScannerPt >= SCANNERBUF_SIZE) ScannerPt = 0; + ScannerBuf[ScannerPt] = c; + } if (c == '\0') { StrpSM--;return(EOF); } else return(c); @@ -138,6 +157,7 @@ static struct tokens flushSM() strcpy(token,BufSM); r.token = token; r.kind = TypeSM; + r.tflag = 0; if (r.kind == ID) { if (isLiteral(r.token)) { r.object = lookupLiteralString(r.token); @@ -151,10 +171,6 @@ static struct tokens flushSM() static isSpaceSM(c) int c; { - static int prev=0; - if ((c == ',') && (prev == ',')) fprintf(stderr,"Warning! ,, is found.\n"); - prev = c; - if (((c <= ' ') || c == ',') && (c!= EOF)) return(1); else return(0); } @@ -202,6 +218,10 @@ static struct tokens getokenSM2(kind,str) int level; if (kind == INIT) { + ScannerWhich = 2; + ScannerPt = 0; + ScannerBuf[0] = 0; + StrpSM = 0; ExistSM = 0;