=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/scanner2.c,v retrieving revision 1.3 retrieving revision 1.10 diff -u -p -r1.3 -r1.10 --- OpenXM/src/kan96xx/Kan/scanner2.c 2001/05/04 01:06:25 1.3 +++ OpenXM/src/kan96xx/Kan/scanner2.c 2020/10/06 11:33:47 1.10 @@ -1,9 +1,11 @@ -/* $OpenXM: OpenXM/src/kan96xx/Kan/scanner2.c,v 1.2 2000/01/16 07:55:41 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kan96xx/Kan/scanner2.c,v 1.9 2005/07/18 10:55:16 takayama 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); @@ -47,15 +49,21 @@ static int TypeSM = ID; /**************** end of declaration part of lexical analizer ******/ static int getSM(); -static putSM(); +static void putSM(); static struct tokens flushSM(); -static isSpaceSM(); -static isDollarSM(); -static isBraceSM(); -static isKakkoSM(); -static isSymbolSM(); +static int isSpaceSM(); +static int isDollarSM(); +static int isBraceSM(); +static int isKakkoSM(); +static int isSymbolSM(); static struct tokens getokenSM2(); +void errorScanner2(char *str); + +extern int ScannerWhich; +extern unsigned char ScannerBuf[]; +extern int ScannerPt; + /**************** code part of lexical analizer ********************/ struct tokens *decomposeToTokens(str,sizep) @@ -97,13 +105,26 @@ 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); } -static putSM(c) +static void putSM(c) int c; /* put a letter on BufSM */ { @@ -138,6 +159,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); @@ -148,35 +170,35 @@ static struct tokens flushSM() return(r); } -static isSpaceSM(c) +static int isSpaceSM(c) int c; { - if ((c <= ' ') && (c!= EOF)) return(1); + if (((c <= ' ') || c == ',') && (c!= EOF)) return(1); else return(0); } -static isDollarSM(c) +static int isDollarSM(c) int c; { if (c == '$') return(1); else return(0); } -static isBraceSM(c) +static int isBraceSM(c) int c; { if (c == '{') return(1); else return(0); } -static isKakkoSM(c) +static int isKakkoSM(c) int c; { if (c == '(') return(1); else return(0); } -static isSymbolSM(c) +static int isSymbolSM(c) int c; { if ((c == '{') || @@ -198,6 +220,10 @@ static struct tokens getokenSM2(kind,str) int level; if (kind == INIT) { + ScannerWhich = 2; + ScannerPt = 0; + ScannerBuf[0] = 0; + StrpSM = 0; ExistSM = 0; @@ -303,7 +329,7 @@ static struct tokens getokenSM2(kind,str) /*********** end of code part of lexical analizer ********************/ -errorScanner2(str) +void errorScanner2(str) char *str; { fprintf(stderr,"Error (scanner2.c): %s\n",str);