Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.13;
Скачать: CL | DM;

Вниз

Получение 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
7-40682
Anatol
2003-08-01 09:03
2003.10.13
Курсор


14-40607
афвуд
2003-09-24 21:13
2003.10.13
Надо мне свой Инспектор обьектов написать.


1-40438
Max_
2003-10-03 11:15
2003.10.13
RichEdit и Print


9-40221
сергей
2003-04-09 15:58
2003.10.13
прорисовка файла


1-40379
GH@ST
2003-10-01 12:47
2003.10.13
Как перебрать список всех открытых окон