Example #1
0
        /// <summary>
        /// Replaces all occurrences of a specified String, with another specified string.
        /// Before oldValue must not follow specified prefix - string.
        /// </summary>
        /// <param name="prefix">Prefix - string.</param>
        /// <param name="oldValue">A String to be replaced.</param>
        /// <param name="newValue">A String to replace all occurrences of oldValue.</param>
        /// <returns>Replaced string.</returns>
        public void ReplaceWithNotEqualPrefix(StiTokenType prefix, string oldValue, string newValue)
        {
            this.Reset();

            StiToken prefixToken = this.GetToken();

            if (prefixToken.Type == StiTokenType.EOF)
            {
                return;
            }
            StiToken token = null;

            do
            {
                token = this.GetToken();
                if (token.Type == StiTokenType.Ident &&
                    prefixToken.Type != prefix &&
                    ((string)token.Data) == oldValue)
                {
                    text = text.Replace(oldValue, newValue, token.Index, token.Length);
                    this.positionInText += newValue.Length;
                }
                prefixToken = token;
            }while (token.Type != StiTokenType.EOF);
            baseText = text.ToString();
        }
Example #2
0
        ///// <summary>
        ///// Replaces all occurrences of a specified string, with another specified string.
        ///// Replacing is produced with provision for tokens.
        ///// </summary>
        ///// <param name="textValue">Text for replace.</param>
        ///// <param name="oldValue">A String to be replaced.</param>
        ///// <param name="newValue">A String to replace all occurrences of oldValue.</param>
        ///// <returns>Replaced string.</returns>
        //public static string Replace(string textValue, string oldValue, string newValue)
        //{
        //    StringBuilder sb = new StringBuilder(textValue);
        //    StiLexer lexer = new StiLexer(textValue);

        //    StiToken token = null;
        //    do
        //    {
        //        token = lexer.GetToken();
        //        if (token.Type == StiTokenType.Ident && ((string)token.Data) == oldValue)
        //        {
        //            sb = sb.Replace(oldValue, newValue, token.Index, token.Length);
        //            lexer.positionInText += newValue.Length;
        //        }

        //    }
        //    while (token.Type != StiTokenType.EOF);

        //    return sb.ToString();
        //}


        /// <summary>
        /// Replaces all occurrences of a specified String, with another specified String.
        /// Before oldValue must follow specified prefix - token.
        /// Replacing is produced with provision for tokens.
        /// </summary>
        /// <param name="textValue">Text for replace.</param>
        /// <param name="prefix">Prefix - token.</param>
        /// <param name="oldValue">A String to be replaced.</param>
        /// <param name="newValue">A String to replace all occurrences of oldValue.</param>
        /// <returns>Replaced string.</returns>
        public static string ReplaceWithPrefix(string textValue, string prefix, string oldValue, string newValue)
        {
            StringBuilder sb    = new StringBuilder(textValue);
            StiLexer      lexer = new StiLexer(textValue);

            StiToken prefixToken = lexer.GetToken();

            if (prefixToken.Type == StiTokenType.EOF)
            {
                return(textValue);
            }

            StiToken token = null;

            do
            {
                token = lexer.GetToken();
                if (token.Type == StiTokenType.Ident &&
                    prefixToken.Type == StiTokenType.Ident &&
                    ((string)prefixToken.Data) == prefix &&
                    ((string)token.Data) == oldValue)
                {
                    sb = sb.Replace(oldValue, newValue, token.Index, token.Length);
                    lexer.positionInText += newValue.Length;
                }
                prefixToken = token;
            }while (token.Type != StiTokenType.EOF);

            return(sb.ToString());
        }
Example #3
0
        /// <summary>
        /// Gets next token.
        /// </summary>
        /// <returns>Next token.</returns>
        public StiToken GetToken()
        {
            Skip();

            #region End of the text
            if (Text.Length <= positionInText)
            {
                return(new StiToken(StiTokenType.EOF, positionInText, 0));
            }
            #endregion

            #region Ident
            else if (Char.IsLetter(Text[positionInText]) || Text[positionInText] == '_' || Text[positionInText] == '№')
            {
                int startIndex = positionInText;
                SavePosToken();
                StiToken token = ScanIdent();
                switch ((string)token.Data)
                {
                case "true":    return(new StiToken(StiTokenType.Value, startIndex, 4, true));

                case "false":   return(new StiToken(StiTokenType.Value, startIndex, 5, false));
                }
                return(token);
            }
            #endregion

            #region Number
            else if (Char.IsDigit(Text[positionInText]))
            {
                SavePosToken();
                return(ScanNumber());
            }
            #endregion

            #region String
            else if (Text[positionInText] == '"')
            {
                SavePosToken();
                return(ScanString());
            }
            #endregion

            #region Char
            else if (Text[positionInText] == '\'')
            {
                SavePosToken();
                return(ScanChar());
            }
            #endregion

            else
            {
                #region Operators
                switch (Text[positionInText])
                {
                case '€': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Euro, positionInText - 1, 1));

                case '®': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Copyright, positionInText - 1, 1));

                case '(': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.LPar, positionInText - 1, 1));

                case ')': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.RPar, positionInText - 1, 1));

                case '{': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.LBrace, positionInText - 1, 1));

                case '}': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.RBrace, positionInText - 1, 1));

                case ',': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Comma, positionInText - 1, 1));

                case '.': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Dot, positionInText - 1, 1));

                case ';': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.SemiColon, positionInText - 1, 1));

                case ':': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Colon, positionInText - 1, 1));

                case '!': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Minus, positionInText - 1, 1));

                case '*': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Mult, positionInText - 1, 1));

                case '^': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Not, positionInText - 1, 1));

                case '/': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Div, positionInText - 1, 1));

                case '\\': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Splash, positionInText - 1, 1));

                case '%': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Percent, positionInText - 1, 1));

                case '#': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Sharp, positionInText - 1, 1));

                case '$': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Dollar, positionInText - 1, 1));

                case '@': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Ampersand, positionInText - 1, 1));

                case '[': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.LBracket, positionInText - 1, 1));

                case ']': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.RBracket, positionInText - 1, 1));

                case '?': SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Question, positionInText - 1, 1));

                    #region Symbol "|"
                case '|':
                    SavePosToken();
                    positionInText++;
                    if (positionInText != Text.Length && Text[positionInText] == '|')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.DoubleOr, positionInText - 2, 2));
                    }
                    return(new StiToken(StiTokenType.Or, positionInText - 1, 1));

                    #endregion

                    #region Symbol "&"
                case '&':
                    SavePosToken();
                    positionInText++;
                    if (positionInText != Text.Length && Text[positionInText] == '&')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.DoubleAnd, positionInText - 2, 2));
                    }
                    return(new StiToken(StiTokenType.And, positionInText - 1, 1));

                    #endregion

                    #region Symbol "+"
                case '+':
                    SavePosToken();
                    positionInText++;
                    if (positionInText != Text.Length && Text[positionInText] == '+')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.DoublePlus, positionInText - 2, 2));
                    }
                    return(new StiToken(StiTokenType.Plus, positionInText - 1, 1));

                    #endregion

                    #region Symbol "-"
                case '-':
                    SavePosToken();
                    positionInText++;
                    if (positionInText != Text.Length && Text[positionInText] == '-')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.DoubleMinus, positionInText - 2, 2));
                    }
                    return(new StiToken(StiTokenType.Minus, positionInText - 1, 1));

                    #endregion

                    #region Symbol "="
                case '=':
                    SavePosToken();
                    positionInText++;
                    if (positionInText != Text.Length && Text[positionInText] == '=')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.Equal, positionInText - 2, 2));
                    }
                    return(new StiToken(StiTokenType.Assign, positionInText - 1, 1));

                    #endregion

                    #region Symbol "<"
                case '<':
                    SavePosToken();
                    positionInText++;
                    if (positionInText != Text.Length && Text[positionInText] == '=')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.LeftEqual, positionInText - 2, 2));
                    }
                    if (positionInText != Text.Length && Text[positionInText] == '<')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.Shl, positionInText - 2, 2));
                    }
                    return(new StiToken(StiTokenType.Left, positionInText - 1, 1));

                    #endregion

                    #region Symbol ">"
                case '>':
                    SavePosToken();
                    positionInText++;
                    if (positionInText != Text.Length && Text[positionInText] == '=')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.RightEqual, positionInText - 2, 2));
                    }
                    if (positionInText != Text.Length && Text[positionInText] == '>')
                    {
                        positionInText++;
                        return(new StiToken(StiTokenType.Shr, positionInText - 2, 2));
                    }
                    return(new StiToken(StiTokenType.Right, positionInText - 1, 1));

                    #endregion

                default:
                {
                    SavePosToken(); positionInText++; return(new StiToken(StiTokenType.Unknown, positionInText - 1, 1));
                }
                }
                #endregion
            }
        }
Example #4
0
        /// <summary>
        /// Wait the right brace.
        /// </summary>
        public bool WaitRbrace2()
        {
            StiToken token = GetToken();

            return(token.Type == StiTokenType.RBrace);
        }
Example #5
0
        /// <summary>
        /// Wait the semicolon.
        /// </summary>
        public bool WaitSemicolon2()
        {
            StiToken token = GetToken();

            return(token.Type == StiTokenType.SemiColon);
        }
Example #6
0
        /// <summary>
        /// Wait the right paren.
        /// </summary>
        public bool WaitRparen2()
        {
            StiToken token = GetToken();

            return(token.Type == StiTokenType.RPar);
        }
Example #7
0
        /// <summary>
        /// Wait the assign.
        /// </summary>
        public bool WaitAssign2()
        {
            StiToken token = GetToken();

            return(token.Type == StiTokenType.Assign);
        }
Example #8
0
        /// <summary>
        /// Wait the right bracket.
        /// </summary>
        public bool WaitComma2()
        {
            StiToken token = GetToken();

            return(token.Type == StiTokenType.Comma);
        }