Форум: "Основная";
Текущий архив: 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.009 c