//- main scanning method ---------------------------------------------- public Fragment getFrag() { Fragment frag = null; char ch = source[srcpos]; //whitespace if (isSpace(ch)) { skipWhitespace(); frag = new Fragment(FragType.SPACE, " "); } //line comment - effectively the end of line else if (ch == ';') { skipLineComment(); frag = new Fragment(FragType.EOLN, "<eoln>"); } //identifier else if (startsIdent(ch)) { string idstr = scanIdentifier(); frag = new Fragment(FragType.WORD, idstr); } //numeric constant else if (isDigit(ch)) { string numstr = scanNumber(); frag = new Fragment(FragType.NUMBER, numstr); } //char constant else if (ch == '\'') { string chstr = scanCharConst(); frag = new Fragment(FragType.CHAR, chstr); } //string constant else if (ch == '"') { string sstr = scanStringConst(); frag = new Fragment(FragType.STRING, sstr); } //end of line - does not include eolns in spliced lines else if ((ch == '\n') || (ch == '\r' && (source[srcpos + 1] == '\n'))) { frag = new Fragment(FragType.EOLN, "<eoln>"); if (ch == '\r') { srcpos++; } srcpos++; } //end of file - check if this isn't a stray 0x0 char in file, if so pass it on as punctuation else if ((ch == '\0') && (srcpos == (source.Length - 1))) { frag = new Fragment(FragType.EOF, "<eof>"); } //anything else is punctuation else { frag = new Fragment(FragType.PUNCT, "" + ch); srcpos++; } return(frag); }
public void putFragBack(Fragment frag) { frags.Add(frag); }
//not handling preprocessing yet - just pass through for now public Fragment getFrag() { Fragment frag = scan.getFrag(); return(frag); }