Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2016, 15:10   #1
quqeiqa2
Пользователь
 
Регистрация: 16.10.2014
Сообщений: 27
По умолчанию C#: ConstCharChecker

Код:
	public static class ConstCharChecker {
		public enum ResultType {
			ErrorWritingChar, UnknownEscapeSequence, Success
		}

		public class Result {
			public ResultType Type;
			public String UnknownEscapeSequence;
		}



		public static Result Check(ConstChar chr) {
			return Check(ref chr.Value, chr.WriteForm);
		}


		public static Result Check(ref String value, ConstCharWriteForm writeForm) {
			switch(writeForm) {
			case ConstCharWriteForm.Number:
				return new Result{
					Type = ConstNumberChecker.Check(ref value, NumeralSystem.Decimal, removeLeftZeros:true) ?
								 ResultType.Success : ResultType.ErrorWritingChar,
					UnknownEscapeSequence = ""
				};

			case ConstCharWriteForm.Char:
				switch(value.Length) {
				case 1:
					return new Result {
						Type = (value[0]==SPECIAL_CHARS.PREFIX) ? ResultType.ErrorWritingChar : ResultType.Success,
						UnknownEscapeSequence = ""
					};
				case 2:
					if(value[0] == SPECIAL_CHARS.PREFIX) {
						var escapeSequenceResult = EscapeSequenceChecker.Check(value);
						return new Result {
							Type = (escapeSequenceResult.Success) ? ResultType.Success : ResultType.UnknownEscapeSequence,
							UnknownEscapeSequence = escapeSequenceResult.UnknownEscapeSequence
						};
					}
					goto FAIL;

				default:
					goto FAIL;
				}
			}

			FAIL:
			return new Result {
				Type = ResultType.ErrorWritingChar,
				UnknownEscapeSequence = ""
			};
		}


	}
Проверка записи символа (содержимое кавычек).
У символа есть 2 формы записи: числовая ('1055', '1054'...) и символьная ('x','z','\n').
Если числовая - проверяется как число, если символьная, то проверяется
как упр. последовательность (длина = 2) и как просто символ (длина = 1).
Иная длина - ошибка.

Последний раз редактировалось quqeiqa2; 02.01.2016 в 15:17.
quqeiqa2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц