Beispiel #1
0
        //GET TOKENS
        public Boolean GetReservedWords(string txt)
        {
            LexicalConstants.ReservedWordsDelims rwd = new LexicalConstants.ReservedWordsDelims();
            LexicalConstants.ReservedWords       rw  = new LexicalConstants.ReservedWords();
            Tokens t = new Tokens();

            List <String> words;
            List <char>   delims;
            List <String> temp;
            Boolean       found = false, hastoken = false, exitfor = false, ifEnd = false, nodelim = true;
            int           tempctr = 0, limit = 0;

            //rwd = td.AddRange(rwd);

            if (txt.Length != 1)
            {
                Boolean iscomment    = false;
                Boolean foundComment = false;
                int     commentctr   = 0;
                while ((txt.Length - 1) > tempctr && !isEnd(txt[tempctr + 1], rwd) && !foundComment)
                {
                    tempctr++;
                    if (commentctr == 0 && txt.ElementAt(0) == 'P')
                    {
                        iscomment = true;
                        commentctr++;
                    }
                    else if (iscomment && commentctr == 1 && txt.ElementAt(1) == 'S')
                    {
                        iscomment = true;
                        commentctr++;
                        tempctr      = 1;
                        foundComment = true;
                    }
                }
                tempctr++;
            }

            for (int i = 0; i < 7; i++)
            {
                ctr    = 0;
                words  = new List <String>();
                delims = new List <char>();
                found  = true;
                switch (i)
                {
                case 0:
                    words  = rw.rw_whitespace;
                    delims = rwd.whitespace;
                    break;

                case 1:
                    words  = rw.rw_1;
                    delims = rwd.delim_1;
                    break;

                case 2:
                    words  = rw.rw_2;
                    delims = rwd.delim_2;
                    break;

                case 3:
                    words  = rw.rw_3;
                    delims = rwd.delim_3;
                    break;

                case 4:
                    words  = rw.rw_dtype;
                    delims = rwd.delim_dtype;
                    break;

                case 5:
                    words  = rw.rw_bool;
                    delims = rwd.delim_bool;
                    break;

                case 6:
                    words.Add("PS");
                    break;
                }
                //Check Reserved Words
                foreach (char c in txt)
                {
                    limit = words.Count - 1;
                    temp  = new List <string>();
                    found = false;
                    foreach (string w in words)
                    {
                        //IF NOT OUT OF RANGE
                        if ((w.Length - 1) >= ctr)
                        {
                            //IF LETTER MATCHED
                            if (c == w.ElementAt(ctr))
                            {
                                found = true;
                                //CHECK SIZE OF WORD AND INPUT
                                if (w.Length == tempctr)
                                {
                                    //CHECK DELIMITER
                                    if ((tempctr - 1) == ctr)
                                    {
                                        if (i != 6)
                                        {
                                            foreach (char delim in delims)
                                            {
                                                //IF NOT OUT OF RANGE
                                                if ((txt.Length - 1) > ctr)
                                                {
                                                    //IF FOUND DELIMITER
                                                    if (txt[ctr + 1] == delim)
                                                    {
                                                        hastoken = true;
                                                        nodelim  = false;
                                                        if (w == "Yes" || w == "No")
                                                        {
                                                            t.setTokens("boollit");
                                                        }
                                                        else
                                                        {
                                                            t.setTokens(w);
                                                        }
                                                        t.setLexemes(w);
                                                        t.setAttributes(w);
                                                        token.Add(t);
                                                        valid++;
                                                        break;
                                                    }
                                                }
                                                else if (w == words[limit] && hastoken == false)
                                                {
                                                    found = false;
                                                }
                                            }

                                            if (hastoken == false)
                                            {
                                                hastoken = true;
                                                nodelim  = false;
                                                found    = true;
                                                t.setTokens("NODELIM");
                                                t.setLexemes(w);
                                                t.setAttributes(w);
                                                token.Add(t);
                                                invalid++;
                                            }
                                            else if (nodelim)
                                            {
                                                hastoken = true;
                                                found    = true;
                                                t.setTokens("INVALID");
                                                t.setLexemes(w);
                                                t.setAttributes(w);
                                                token.Add(t);
                                                invalid++;
                                                break;
                                            }

                                            if (hastoken)
                                            {
                                                break;
                                            }
                                        }
                                        //IF COMMENT
                                        else
                                        {
                                            Boolean endcomment = false;
                                            while (!endcomment)
                                            {
                                                if ((txt.Length - 1) > ctr)
                                                {
                                                    //IF FOUND NEWLINE
                                                    if (txt[ctr + 1] == '\n')
                                                    {
                                                        hastoken   = true;
                                                        nodelim    = false;
                                                        endcomment = true;
                                                    }
                                                }
                                                else
                                                {
                                                    hastoken   = true;
                                                    endcomment = true;
                                                }

                                                if (!endcomment)
                                                {
                                                    ctr++;
                                                }
                                            }

                                            if (hastoken)
                                            {
                                                break;
                                            }
                                            lines++;
                                        }
                                    }
                                    else
                                    {
                                        temp.Add(w);
                                    }
                                }
                            }
                        }
                    }
                    ctr++;
                    words = temp;
                    if (found == false)
                    {
                        break;
                    }
                    if (hastoken)
                    {
                        exitfor = true;
                        break;
                    }
                }
                if (exitfor)
                {
                    exitfor = false;
                    break;
                }
            }

            //IF NOTHING FOUND
            if (found == false)
            {
                hastoken = false;
                foreach (var item in rwd.delim_end)
                {
                    if (txt.ElementAt(ctr - 1) == item)
                    {
                        ifEnd = true;
                    }
                }
                while (ifEnd != true)
                {
                    foreach (var item in rwd.delim_end)
                    {
                        if ((txt.Length) > ctr)
                        {
                            if (txt.ElementAt(ctr) == item)
                            {
                                ifEnd = true;
                                break;
                            }
                        }
                        else
                        {
                            ifEnd = true;
                        }
                    }
                    if (ifEnd != true)
                    {
                        ctr++;
                    }
                }
            }

            if (!(txt.Length >= ctr))
            {
                ctr--;
            }

            return(hastoken);
        }
Beispiel #2
0
        public Boolean ReservedWords(string txt)
        {
            LexicalConstants.ReservedWords      resWord      = new LexicalConstants.ReservedWords();
            LexicalConstants.ReservedWordsDelim resWordDelim = new LexicalConstants.ReservedWordsDelim();
            Tokens token = new Tokens();

            List <string> words  = new List <string>();
            List <char>   delims = new List <char>();
            List <string> temp   = new List <string>();

            Boolean hasReservedWord = false, hasToken = false, exit = false;

            int    limit = 0, flag = -1, ctr = 0;
            string wordComp;

            // Gets the size of the entered word
            // Separate it from other words
            for (int a = 0; a < txt.Length; a++)
            {
                foreach (char end in resWordDelim.rw_ender)
                {
                    if (end == txt.ElementAt(a))
                    {
                        if (a == 0)
                        {
                            if (txt.ElementAt(a) == '!')
                            {
                                break;
                            }
                        }
                        if (a == 3)
                        {
                            if (txt.ElementAt(0) == 'E' && txt.ElementAt(1) == 'N' && txt.ElementAt(2) == 'D' && txt.ElementAt(a) == '!')
                            {
                                break;
                            }
                        }

                        hasToken = true;
                    }
                }
                if (hasToken == true)
                {
                    break;
                }
                flag++;
            }

            hasToken = false;

            for (int i = 0; i < 6; i++)
            {
                ctr = 0;
                switch (i)
                {
                case 0:
                    words  = resWord.rw_whitespace;
                    delims = resWordDelim.whitespace;
                    break;

                case 1:
                    words  = resWord.rw_1;
                    delims = resWordDelim.delim_1;
                    break;

                case 2:
                    words  = resWord.rw_2;
                    delims = resWordDelim.delim_2;
                    break;

                case 3:
                    words  = resWord.rw_3;
                    delims = resWordDelim.delim_3;
                    break;

                case 4:
                    words  = resWord.rw_4;
                    delims = resWordDelim.delim_4;
                    break;

                case 5:
                    words  = resWord.rw_boolean;
                    delims = resWordDelim.delim_boolean;
                    break;

                default:
                    break;
                }

                foreach (char t in txt)
                {
                    hasReservedWord = false;
                    limit           = words.Count - 1;
                    foreach (string word in words.ToList())
                    {
                        if ((word.Length - 1) >= ctr)
                        {
                            if (t == word.ElementAt(ctr))
                            {
                                hasReservedWord = true;
                                if (word.Length == flag + 1)
                                {
                                    if ((flag) == ctr)
                                    {
                                        wordComp = txt.Substring(0, ctr + 1);
                                        if (word == wordComp)
                                        {
                                            foreach (char delim in delims)
                                            {
                                                if ((txt.Length - 1) > ctr)
                                                {
                                                    if (txt[flag + 1] == delim)
                                                    {
                                                        hasToken = true;
                                                        if ((word == "true") || (word == "false"))
                                                        {
                                                            token.setTokens("booleanlit");
                                                        }
                                                        else
                                                        {
                                                            token.setTokens(word);
                                                        }
                                                        token.setLexemes(word);
                                                        token.setDescription(word);
                                                        tokens.Add(token);
                                                    }
                                                }
                                                else if (word == words[limit] && hasToken == false)
                                                {
                                                    hasReservedWord = false;
                                                }
                                                else if (hasToken)
                                                {
                                                    break;
                                                }
                                            }
                                            if (hasToken == false)
                                            {
                                                hasToken        = true;
                                                hasReservedWord = true;
                                                token.setTokens("No Delimiter");
                                                token.setLexemes(word);
                                                token.setDescription(word);
                                                tokens.Add(token);
                                                break;
                                            }
                                            if (hasToken)
                                            {
                                                break;
                                            }
                                        }
                                    }
                                    else
                                    {
                                        temp.Add(word);
                                    }
                                }
                            }
                        }
                    }
                    ctr++;
                    words = temp;
                    if (!hasReservedWord)
                    {
                        break;
                    }
                    if (hasToken)
                    {
                        exit = true;
                        break;
                    }
                }
                if (exit)
                {
                    break;
                }
            }



            ctra = ctr;
            return(hasToken);
        }