static PatternToken GetToken(string token, PatternToken previousToken)
        {
            if (string.IsNullOrEmpty(token))
            {
                return(PatternToken.UNKNOWN);
            }

            TokenCharacterType lType = GetCharType(token[0]);

            if (lType == TokenCharacterType.UNKNOWN)
            {
                return(PatternToken.UNKNOWN);
            }

            if (lType == TokenCharacterType.WORD)
            {
                if (token.Length == 1)
                {
                    return(PatternToken.VARIABLE);                      // variables are one character only (at least in this language)
                }
                else
                {
                    return(PatternToken.FUNCTION);                      // functions are always more than on character (in this language)
                }
            }
            if (lType == TokenCharacterType.NUMBER)
            {
                return(PatternToken.INTEGER);
            }

            if ((lType == TokenCharacterType.STAR) && (previousToken == PatternToken.COMMA || previousToken == PatternToken.OPEN_PARA))
            {
                return(PatternToken.VARIABLE);
            }

            if (PatternTokens.Instance.ContainsKey(token))
            {
                return(PatternTokens.Instance[token]);
            }

            return(PatternToken.UNKNOWN);
        }
        static string ReadTokenString(string code, ref int position)
        {
            string lToken = string.Empty;

            TokenCharacterType lType = TokenCharacterType.UNKNOWN;

            while (position < code.Length)
            {
                char c = code[position++];

                if (c != ' ')
                {
                    TokenCharacterType lCurType = GetCharType(c);

                    if (lCurType != TokenCharacterType.UNKNOWN)
                    {
                        if (lType == TokenCharacterType.UNKNOWN)
                        {
                            lType  = lCurType;
                            lToken = lToken + c;

                            if (lCurType == TokenCharacterType.SEPERATOR)
                            {
                                return(lToken);
                            }
                        }
                        else if (lType == lCurType)
                        {
                            lToken = lToken + c;
                        }
                        else if (lType != lCurType)
                        {
                            position--;
                            return(lToken);
                        }
                    }
                }
            }

            return(lToken);
        }