Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
Внизeval() в Delphi Найти похожие ветки
← →
wii (2008-01-20 17:28) [0]Существует ли в Delphi аналог функции eval() из javascript, которая переводит строку в выражение?
← →
Efir (2008-01-20 19:42) [1]Нет, придётся писать самому или искать компонент.
← →
homm © (2008-01-20 20:21) [2]> [0] wii (20.01.08 17:28)
> Существует ли в Delphi аналог функции eval() из javascript,
> которая переводит строку в выражение?
Неуд за принципиальное не понимает основ и принципов того, с чем иммешь дело.
← →
wii (2008-01-20 21:18) [3]Ну так поделись основами.
← →
homm © (2008-01-20 21:22) [4]> [3] wii (20.01.08 21:18)
Еще чего. Иди букварь читай.
← →
Loginov Dmitry © (2008-01-20 21:32) [5]>переводит строку в выражение
это как следует понимать?
← →
homm © (2008-01-20 21:33) [6]> [5] Loginov Dmitry © (20.01.08 21:32)
> это как следует понимать?
Он хочет runtime компилятор.
← →
wii (2008-01-20 21:36) [7]
> это как следует понимать?
>
Например нам дана строка "x+x". И она должна восприниматься как выражение x+x где x уже переменная
← →
engine © (2008-01-20 21:43) [8]> [7] wii (20.01.08 21:36)
а где значение переменной х брать?
← →
Loginov Dmitry © (2008-01-20 21:45) [9]> Например нам дана строка "x+x". И она должна восприниматься
> как выражение x+x где x уже переменная
Если так тянет к javascript, то можешь его использовать и из Delphi. MS ScriptControl такую возможность предоставляет.
← →
wii (2008-01-20 21:47) [10]
> а где значение переменной х брать?
Ну в javascript ее можно задать до вызова функции.
Ну как я понял функции такой в Делфи все таки нет.
← →
homm © (2008-01-20 21:48) [11]> [10] wii (20.01.08 21:47)
> Ну как я понял функции такой в Делфи все таки нет.
Правльно понимаешь, и быть не может.
← →
engine © (2008-01-20 21:49) [12]> [10] wii (20.01.08 21:47)
нет и не надо.
← →
wii (2008-01-20 21:49) [13]
> Loginov Dmitry © (20.01.08 21:45) [9]
>
>
> Если так тянет к javascript, то можешь его использовать
> и из Delphi. MS ScriptControl такую возможность предоставляет.
>
Спасибо. Надо будет изучить.
← →
wii (2008-01-20 21:51) [14]
> engine © (20.01.08 21:49) [12]
>
> > [10] wii (20.01.08 21:47)
>
> нет и не надо.
Ну почему не надо? Очень даже полезная функция.
← →
Сергей М. © (2008-01-20 21:58) [15]
> wii (20.01.08 21:36) [7]
И где же ты собрался объявлять/инициализировать эту самую переменную х ?
← →
engine © (2008-01-20 22:00) [16]> [14] wii (20.01.08 21:51)
Ну если так хочется, то можно свою написать, что-то вида:type TParams = array of Double;
function Calculate (Params : TParams; Formula : String) : Double;
где в формуле к параметрам обращаться по индексам:
( 1 + 2 ) — 3
Я так вижу решение. После пары литров пива ))
← →
Anatoly Podgoretsky © (2008-01-21 00:52) [17]> wii (20.01.2008 21:51:14) [14]
Зато она есть в WSH
← →
Григорьев Антон © (2008-01-21 13:58) [18]http://www.delphikingdom.com/asp/itemq.asp?mode=1&ItemID=432
← →
Юрий Зотов © (2008-01-21 15:30) [19]> homm © (20.01.08 21:48) [11]
Разве интерпретаторы уже отменили? Вроде, нет.
А тогда почему же на Delphi нельзя написать функцию для вычисления выражений? Почему ее "и быть не может"?
← →
homm © (2008-01-21 15:34) [20]> [19] Юрий Зотов © (21.01.08 15:30)
> А тогда почему же на Delphi нельзя написать функцию для
> вычисления выражений?
Потому что eval это не «функцию для вычисления выражений». Это полноценный runtime интерпретатор, поддерживающий весь синтаксис javascript. Может быть это возможно в Delphi.NET, но в натичной точно нет, иначе нужна нехилая база знаний о среде выполнения и имеющихся переменных и классах.
← →
homm © (2008-01-21 15:36) [21]*натичной = нативной
← →
Юрий Зотов © (2008-01-21 15:40) [22]> homm © (21.01.08 15:34) [20]
1. Почему на Delphi нельзя написать "полноценный runtime интерпретатор, поддерживающий весь синтаксис javascript"? Почему его "и быть не может"?
2. Как следует из вопроса, полноязычный интерпретатор автору не нужен. Ему нужно перевести строку в выражение. Значит, задача резко упрощается и тем более может быть решена на Delphi.
← →
clickmaker © (2008-01-21 15:47) [23]а если там нужны только 4 арифм. действия, так и вовсе фигня )
← →
homm © (2008-01-21 15:47) [24]> [22] Юрий Зотов © (21.01.08 15:40)
> 1. Почему на Delphi нельзя написать "полноценный runtime
> интерпретатор, поддерживающий весь синтаксис javascript"?
Нет проблем с написанием самого интерпритатора. Есть проблемы со связью среды выполнения интерпетированного и нативного кода. Читать [7], [8], [10].
> Как следует из вопроса, полноязычный интерпретатор автору не нужен.
Из вопроса, по моему это никак не следует.
> Ему нужно перевести строку в выражение.
И в выражении манипулировать переменными, задаными в нативном коде.
Все я понял, к чему Вы клоните, понятно, что задачу можно видоизменить, как например в [16], и она становится детской. Но почему я не прав, отвечая что в изложенном виде задача не решаемая, я не понимаю.
← →
Юрий Зотов © (2008-01-21 15:58) [25]> homm © (21.01.08 15:47) [24]
> Есть проблемы со связью среды выполнения интерпетированного и
> нативного кода.
Можно построить таблицу переменных (имя - адрес). Можно передавать значения через параметры. Это решения? Решения.
> Но почему я не прав
Потому что [2] и [4] слишком грубо, а [11] - слишком категорично. Это конфа для начинающих, которые часто не умеют толком сформулировать вопрос. Поэтому стоило бы уточнить, что конкретно автору нужно. И либо объяснить, в чем он неправ, либо помочь. Но не [2] и [4]. Незнание основ в этой конфе - нормально.
← →
homm © (2008-01-21 16:02) [26]> [25] Юрий Зотов © (21.01.08 15:58)
> Можно построить таблицу переменных (имя - адрес).
Кто этим будет заниматся? Функция eval? А она где эти данные возьмет?
> Можно передавать значения через параметры.
Сразу все возможные переменные, используемые в программе? А как интерпретируемиый код поймет, что где лежит?
← →
@!!ex © (2008-01-21 16:27) [27]> [26] homm © (21.01.08 16:02)
Ты придираешься к мелочам. ИМХО
← →
wii (2008-01-21 16:29) [28]Вообще я в свое время делал строковый калькулятор. Просто данная функция более гибкая и могла бы сократить код.
Вопрос по MS ScriptControl:
procedure TForm1.Button1Click(Sender: TObject);
var
x:integer;
begin
sc.Language:="VBScript";
sc.AllowUI:=true;
sc.AddCode(memo1.Text);
x:=sc.Run("AddTwo",4,6);
end;
Почему компилятор ругается на параметры функции Run?
← →
wii (2008-01-21 16:30) [29]sc это TscriptControl
← →
homm © (2008-01-21 16:33) [30]> [27] @!!ex © (21.01.08 16:27)
> Ты придираешься к мелочам.
Да нет. Полный аналог функции eval в Delphi невозможен. Частные случаи, когда мы на этапе компиляции еще знаем, какие нам там понядобятся данные вообще не в счет.
← →
Юрий Зотов © (2008-01-21 16:37) [31]> homm © (21.01.08 16:02) [26]
> Кто этим будет заниматся?
Нативный код. Функция может использовать готовую таблицу.
> Сразу все возможные переменные, используемые в программе?
Почему нет? Динамический массив, например.
> А как интерпретируемиый код поймет, что где лежит?
Можно передавать параметры в виде "имя-адрес-тип".
type
TParam = record
Name: string;
Address: pointer;
AType: TVarType;
end;
TParams: array of TParam;
function Eval(Expression: string; Params: TParams): variant;
← →
homm © (2008-01-21 16:43) [32]> [31] Юрий Зотов © (21.01.08 16:37)
Юрий, это глупый спор. Я прекрасно понимаю, что заадча, в том виде, в котром она нужна автору, скорее всего решаема. Вы прекрасно понимаете, что задача, в том виде, в котром она была сформулированна автором, в Delphi не решаема в принципе. Предлагаю на этом и разойтись.
← →
Юрий Зотов © (2008-01-21 16:44) [33]> homm © (21.01.08 16:43) [32]
А разве [31] - не решение?
← →
homm © (2008-01-21 16:47) [34]> [33] Юрий Зотов © (21.01.08 16:44)
Нет. Протатип функции eval выглядит так:function Eval(Expression: string): variant;
И доступны коду любые переменные, дочтупные в вызывающем блоке, а не только те, о которых позаботился программист, вызывающий функцию.
← →
Юрий Зотов © (2008-01-21 16:50) [35]> homm © (21.01.08 16:47) [34]
В вопросе спрашивается, есть ли аналог, а не точная копия.
Готового аналога, естественно, нет. Но он возможен, принципиальных препятствий тоже нет.
← →
wii (2008-01-21 16:52) [36]Мне кажется ваш спор бессмысленный. Лучше помогите мне с вопросом :)
← →
Юрий Зотов © (2008-01-21 16:55) [37]> wii (21.01.08 16:52) [36]
Уточните вопрос - какие операции и переменные каких типов могут встречаться в выражениях? Могут ли в них встречаться функции и если да, то какие?
← →
homm © (2008-01-21 16:57) [38]> [35] Юрий Зотов © (21.01.08 16:50)
> Но он возможен, принципиальных препятствий тоже нет.
Очень не дальновидно с вашей стороны так утверждать, т.к. они естественно есть, и не быть их не может.
[31] — не аналог, [31] — частный случай, когда нам заранее известно, какие переменные понадобятся интерпретируемому коду. Или вы знаете способ инумеровать все переменные, доступные на этапе выполнения в данном блоке, с целью их передачи в тело eval"а?
← →
Сергей М. © (2008-01-21 16:57) [39]
> wii (21.01.08 16:52) [36]
> Мне кажется ваш спор бессмысленный
Ну ты и клоун)
← →
Юрий Зотов © (2008-01-21 17:41) [40]> homm © (21.01.08 16:57) [38]
> когда нам заранее известно, какие переменные понадобятся
> интерпретируемому коду.
Если строку Expression мы формируем сами, то нам всегда известно, какие переменные в ней встречаются.
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.042 c