示例#1
0
            public string ToString(TokenClass classNumber, int tokenNumber)
            {
                var token = "?";

                switch (classNumber)
                {
                case TokenClass.ReservedWord:
                    token = ReservedWords.ElementAt(tokenNumber);
                    break;

                case TokenClass.OperationSign:
                    token = OperationSigns.ElementAt(tokenNumber);
                    break;

                case TokenClass.Delmer:
                    token = Delmers.ElementAt(tokenNumber);
                    break;
                }

                return($"{classNumber}:{token}");
            }
 private static bool IsOperationSign(string item)
 {
     return(OperationSigns.Contains(item));
 }
 //Проверка, является ли введенный токен знаком операции
 static bool IsOperation(string TokenToCheck)
 {
     return(OperationSigns.Contains(TokenToCheck));
 }
示例#4
0
        // Преобразование выражения к виду обратной польской записи
        public static string TranslateExpression(string Expression)
        {
            // Стек для хранения операторов на время преобразования выражения
            Stack <string> TranslationStack = new Stack <string>();
            // Строка, содержащая преобразованное выражение
            string RPNExpression = "";

            // Пока не закончится исходное выражение
            while (Expression != "")
            {
                // Берем первый токен выражения
                string Token = GetFirstToken(Expression);
                Expression = Expression.Remove(0, Token.Length).TrimStart(' ');

                // Токен - знак операции
                if (OperationSigns.Contains(Token))

                {
                    // Элемент на вершине стека - знак операции большего или равного приоритета
                    if ((TranslationStack.Count > 0) && (OperationSigns.Contains(TranslationStack.Peek())) &&
                        (CheckPriority(Token, TranslationStack.Peek())))
                    {
                        // Выталкиваем токен с вершины в выходную строку
                        RPNExpression += TranslationStack.Pop() + " ";
                    }

                    // Помещаем токен в стек
                    TranslationStack.Push(Token);
                }

                else
                // Токен - число
                if (FigureSigns.Contains(Token[0]))
                {
                    // Добавляем токен в выходную строку
                    RPNExpression += Token + " ";
                }

                else
                // Токен - (
                if (Token == "(")
                {
                    // Помещаем токен в стек
                    TranslationStack.Push(Token);
                }
                // Токен - )
                else if (Token == ")")
                {
                    // Пока не дойдем до токена (
                    while (TranslationStack.Peek() != "(")
                    {
                        // Выталкиваем токен с вершины в выходную строку
                        RPNExpression += TranslationStack.Pop() + " ";
                    }
                    // Удаялем токен (
                    TranslationStack.Pop();
                }
            }

            // Выталкиваем из стека в выходную все оставшиеся элементы
            while (TranslationStack.Count > 0)
            {
                RPNExpression += TranslationStack.Pop() + " ";
            }

            return(RPNExpression);
        }