예제 #1
0
        //- 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);
        }
예제 #2
0
 public void putFragBack(Fragment frag)
 {
     frags.Add(frag);
 }
예제 #3
0
        //not handling preprocessing yet - just pass through for now
        public Fragment getFrag()
        {
            Fragment frag = scan.getFrag();

            return(frag);
        }