Здравствуйте, Ka3a4oK, Вы писали:
KK>В каком состоянии находится регистронезависимый парсинг? KK>Я хочу чтобы, например, строки ниже парсились одинаково.
Нужно придумать и сделать синтакис.
Или как вариант прилепить опцию которая сделает все строки регистро независимыми.
Все остальное давно есть.
Правда сейчас придет Влад и будет орать что так делать не надо. И что проще перевести строку в нужный регистр.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
WH>Нужно придумать и сделать синтакис. WH>Или как вариант прилепить опцию которая сделает все строки регистро независимыми. WH>Все остальное давно есть.
Мне достаточно, чтобы в функцию TryParse передавался еще один параметр, по которому рещалось как парсить — регистрозависимо или регистронезависимо. Так сейчас сделано в boost::spirit.
WH>Правда сейчас придет Влад и будет орать что так делать не надо. И что проще перевести строку в нужный регистр.
Тогда мы потеряем регистр там где он важен. В вышеприведенном примере — для строк One и Two.
Здравствуйте, Ka3a4oK, Вы писали:
WH>>Нужно придумать и сделать синтакис. WH>>Или как вариант прилепить опцию которая сделает все строки регистро независимыми. WH>>Все остальное давно есть.
KK>Мне достаточно, чтобы в функцию TryParse передавался еще один параметр, по которому рещалось как парсить — регистрозависимо или регистронезависимо. Так сейчас сделано в boost::spirit.
WH>>Правда сейчас придет Влад и будет орать что так делать не надо. И что проще перевести строку в нужный регистр. KK>Тогда мы потеряем регистр там где он важен. В вышеприведенном примере — для строк One и Two.
Можно просто в grammar занести два варианта "and" / "AND".
Здравствуйте, alvas, Вы писали:
A>Можно просто в grammar занести два варианта "and" / "AND".
а так же And и aNd и anD и ANd и aND ?? А не дай бог регистронезависимым окажется слово из 4 букв???
Здравствуйте, Ka3a4oK, Вы писали:
KK>Тогда мы потеряем регистр там где он важен. В вышеприведенном примере — для строк One и Two.
В этом случае в TryParse не подходит. Ибо как ему сказать какое правило парсить регистро зависимо, а какое нет?
К тому же правила компилируются.
И если что-то передавать в TryParse то придется сгенерировать два парсера. Те в 2 раза больше сгенерированного кода, а его и так очень не мало получается.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Jack128, Вы писали:
J>Здравствуйте, alvas, Вы писали:
A>>Можно просто в grammar занести два варианта "and" / "AND". J>а так же And и aNd и anD и ANd и aND ?? А не дай бог регистронезависимым окажется слово из 4 букв???
Здравствуйте, WolfHound, Вы писали:
WH>А ты проверил? Что-то мне как-то сомнительно что это работает.
Я эту штуку сам и сделал. SourceSnapshot имеет два свойства: Text и OriginalText. Парсер ползет по тексту из Text, а GetText берет строку из OriginalText. В простейшем случае OriginalText и Text — это одна и та же строка. В примере Text заменен на приведенную к нижнему регистру строку, и парсер ползет по ней.
Здравствуйте, Ka3a4oK, Вы писали:
H>> SourceSnapshot(input).WithText(input.ToLowerInvariant()) |> parser.Parse |> WriteLine; // магия!
KK>Нельзя ли пояснить, что это за синтаксис?
Здравствуйте, hardcase, Вы писали:
H>Я эту штуку сам и сделал. SourceSnapshot имеет два свойства: Text и OriginalText. Парсер ползет по тексту из Text, а GetText берет строку из OriginalText. В простейшем случае OriginalText и Text — это одна и та же строка. В примере Text заменен на приведенную к нижнему регистру строку, и парсер ползет по ней.
Это страшный костыль ибо:
Тогда мы потеряем регистр там где он важен. В вышеприведенном примере — для строк One и Two.
Здравствуйте, Ka3a4oK, Вы писали:
WH>>Правда сейчас придет Влад и будет орать что так делать не надо. И что проще перевести строку в нужный регистр. KK>Тогда мы потеряем регистр там где он важен. В вышеприведенном примере — для строк One и Two.
Владу ходить не нужно. Хардкейс давно все сделал. Регистр тоже никуда не теряется, так как используется две строки. По одной ведется парсинг, а по второй формируются подстроки. Вторая, естественно, является исходной строкой с не измененным регистром, а в первой регистр приводится к нижнему или верхнему регистру.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>На фиг это никому не нужно. Или язык регистронезависимый или зависимый.
Взять, например, Sybase T-SQL. Все ключевые слова и, если не ошибаюсь, именя некоторых системных функций регистронезависимые. Имена таблиц, полей, вью, пользовательский функций регистрозависимые.
Если нам не помогут, то мы тоже никого не пощадим.