=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/scanner2.c,v retrieving revision 1.6 retrieving revision 1.10 diff -u -p -r1.6 -r1.10 --- OpenXM/src/kan96xx/Kan/scanner2.c 2004/09/12 00:26:21 1.6 +++ 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.5 2004/09/10 22:21:27 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) @@ -106,13 +114,17 @@ static int getSM() fprintf(stderr,"\n"); } - c = StringSM[StrpSM++]; + 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 */ { @@ -158,35 +170,35 @@ static struct tokens flushSM() return(r); } -static isSpaceSM(c) +static int isSpaceSM(c) int c; { 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 == '{') || @@ -208,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; @@ -313,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);