Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Вниз

Получение True или False по выражению в строке   Найти похожие ветки 

 
AndrewK   (2003-10-01 14:49) [0]

Подскажите, можно ли как-нибудь вычислить логическое выражение заданное строкой.
Например есть строка

"("Воронеж" = "Воронеж") and ((24 > 2) or (24 < 100))"

Функция, которой передается эта строка, должна вернуть True.

Если ей передать строку
"("Воронеж" <> "Воронеж") and ((24 > 2) or (24 < 100))"то она должна вернуть False


 
Digitman   (2003-10-01 14:58) [1]


> можно ли как-нибудь


Можно. Но далеко не "как-нибудь".
Интерпретатор произвольного языка - штука совсем не простая.

Если входное лог.выражение "причесать" под лексику/синтаксис/грамматику Паскаля, то в принципе можно воспользоваться готовым Паскаль-интерпретером, в этом случае
тебе сюда : http://www.carlo-kok.com ... иначе ищи продукт TP Lex & Yacc


 
Johnny Smith   (2003-10-01 15:30) [2]

2Digitman © (01.10.03 14:58) [1]
Интерпретатор произвольного языка - штука совсем не простая.
Да нет, довольно простая :)))).
Я писал часов 6.
Около 15 кб.


 
Digitman   (2003-10-01 15:36) [3]


> Johnny Smith


ай малацца !)

но я сказал - ПРОИЗВОЛЬНОГО !!!
боюсь, что твои "6 часов + 15 кб" не тянут на произвольный язык)


 
Johnny Smith   (2003-10-01 15:40) [4]

2Digitman © (01.10.03 15:36) [3]
А речь идет о произвольном языке?
можно ли как-нибудь вычислить логическое выражение заданное строкой


 
Digitman   (2003-10-01 15:46) [5]


> Johnny Smith


а завтра автору захочется нарастить исх.язык новыми конструкциями - что тогда ?)


 
Johnny Smith   (2003-10-01 15:50) [6]

2Digitman © (01.10.03 15:46) [5]
а завтра автору захочется нарастить исх.язык новыми конструкциями - что тогда ?)

А вот тогда надо будет поизучать теорию построения компиляторов.
А пока человек просто хочет фильтровать данные на клиенте, если я правильно понял.


 
Digitman   (2003-10-01 15:59) [7]


> Johnny Smith


а нахрена ?)

если речь-таки идет о клиенте БД, то на это есть OnFilterRecord()
и выпендриваться не стоит в этом случае со всякими там "языками" )


 
Johnny Smith   (2003-10-01 16:01) [8]

Digitman © (01.10.03 15:59) [7]
а нахрена ?)
А это не ко мне вопрос :))))


 
Digitman   (2003-10-01 16:52) [9]


> Johnny Smith


ну ты ж сделал свое предположение) ... насчет клиента БД) ... ну так и я тоже, за неимением подробностей окружения задачи, сделал свое, насчет потенциальной расширяемости языка)


 
AndrewK   (2003-10-01 17:50) [10]

Не надо ссориться. Интернет упал - выйти не мог.

Объясняю зачем мне это надо?

Все просто - мне надо разукрасить строчки таблицы по определенному признаку. Например раскрасить ячейку 1 синим цветом если 2 ячейка больше третьей или раскрасить серым 4 ячейку если содержимое 5 ячейки совпадает со значением 6 ячейки. Штука в том, что настройку всего этого надо вынести за программу - в настройки.

Пока придумал вот что: беру условие, которое храниться в настройках, например для первой ячейки это будет #Cell2 > #Cell3 а для четвертой - "#Cell5" <> "#Cell6".

Когда буду обрабатывать реальные данные программой заменяю #CellX на соответствующие значения и получаю, к примеру, следующее:


"2 > 4" - для первого условия
""Значение 1" <> "Значение 1"" - для второго условия


Теперь мне надо эти строки передать функции, которая вернет True или False.

2Johnny Smith: Действительно для этой задачи я думаю строить полнофункциональный язык смысла нет.

2Digitman: Спасибо за ссылочку. Чувствую себя как маньяк с новой бензопилой. Главное сеййчас не увлечься. :)


 
ZrenBy   (2003-10-01 18:04) [11]

В качестве шутки :)


declare @Q nvarchar(1000)
declare @S nvarchar(2000)

set @Q = N"(""Воронеж"" = ""Воронеж"") and ((24 > 2) or (24 < 100))"

set @S = N"select R=sign(count(*))from sysdatabases where "+@Q

exec sp_executesql @S


 
Digitman   (2003-10-01 18:10) [12]


> AndrewK


что-то идея твоя с хранением в настройках строки с лог.выражением мне крайне не нравится ... наверняка есть куча других решений задачи, более простых, изящных и эффективных ... надо почесать репу) ... но - завтра


 
AndrewK   (2003-10-01 22:16) [13]

> Digitman: если не трудно - буду благодарен за любые мысли по этому поводу.


 
Тих   (2003-10-01 22:32) [14]

AndrewK © (01.10.03 17:50) [10]
Digitman © (01.10.03 18:10) [12]

И в самом деле смысла нет. С вероятностью 99% у вас на машине уже стоит интерпретатор VBScript или JScript, а соревноваться с MS по написанию полноценного и шустрого движка, который использует полмира, я б не стал ) А уж внедрить его в свою программу - вот это действительно пятиминутное дело.


 
AndrewK   (2003-10-03 08:09) [15]

> Digitman: Нет каких-нибудь мыслей по этому вопросу?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.10.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.019 c
1-40398
kanych
2003-10-01 03:23
2003.10.13
Ошибка при чтении содержимого файла в буффер


1-40476
k_len
2003-10-02 13:56
2003.10.13
Exception EDBEngineError


1-40360
sunwheel
2003-10-03 10:09
2003.10.13
Кто перехватывает сообщение KeyDown?


3-40248
ViKS
2003-09-23 12:17
2003.10.13
Работа с компонентом DBCombobox


3-40244
Dark Elf
2003-09-23 17:37
2003.10.13
Имя поля с пробелами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский