Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

eval() в Delphi


Страницы:   1 2 3

wii ©   (2008-01-20 17:28:00) 

Существует ли в Delphi аналог функции eval() из javascript, которая переводит строку в выражение?


Юрий Зотов   (2008-01-21 18:36:00) [1]

> homm ©   (21.01.08 17:50) [41]
> homm ©   (21.01.08 17:59) [42]  

Ваши аргументы поистине неоспоримы. Поэтому я и не буду их оспаривать.


Palladin   (2008-01-21 18:34:00) [2]

В RemObject Pascal Script и его подобных все функции организующие eval есть :) но особенно рекомендую RO PS, очень красиво построен, есть огорчающие моменты, но он жестоко разыивается и фиксится... ну еще один молекулярноминимальный плюсик... он бесплатный


homm   (2008-01-21 17:59:00) [3]

> [40] Юрий Зотов ©   (21.01.08 17:41)

Если, да кабы… Частный случай.


homm   (2008-01-21 17:50:00) [4]

> [40] Юрий Зотов ©   (21.01.08 17:41)
> Если строку Expression мы формируем сами, то нам всегда
> известно, какие переменные в ней встречаются.

Уже ли? Всегда ли?


Юрий Зотов   (2008-01-21 17:41:00) [5]

> homm ©   (21.01.08 16:57) [38]

> когда нам заранее известно, какие переменные понадобятся
> интерпретируемому коду.

Если строку Expression мы формируем сами, то нам всегда известно, какие переменные в ней встречаются.


Сергей М.   (2008-01-21 16:57:00) [6]


> wii   (21.01.08 16:52) [36]



> Мне кажется ваш спор бессмысленный


Ну ты и клоун)


homm   (2008-01-21 16:57:00) [7]

> [35] Юрий Зотов ©   (21.01.08 16:50)
> Но он возможен, принципиальных препятствий тоже нет.

Очень не дальновидно с вашей стороны так утверждать, т.к. они естественно есть, и не быть их не может.
[31] — не аналог, [31] — частный случай, когда нам заранее известно, какие переменные понадобятся интерпретируемому коду. Или вы знаете способ инумеровать все переменные, доступные на этапе выполнения в данном блоке, с целью их передачи в тело eval'а?


Юрий Зотов   (2008-01-21 16:55:00) [8]

> wii   (21.01.08 16:52) [36]

Уточните вопрос - какие операции и переменные каких типов могут встречаться в выражениях? Могут ли в них встречаться функции и если да, то какие?


wii   (2008-01-21 16:52:00) [9]

Мне кажется ваш спор бессмысленный. Лучше помогите мне с вопросом :)


Юрий Зотов   (2008-01-21 16:50:00) [10]

> homm ©   (21.01.08 16:47) [34]

В вопросе спрашивается, есть ли аналог, а не точная копия.

Готового аналога, естественно, нет. Но он возможен, принципиальных препятствий тоже нет.


homm   (2008-01-21 16:47:00) [11]

> [33] Юрий Зотов ©   (21.01.08 16:44)

Нет. Протатип функции eval выглядит так:
function Eval(Expression: string): variant;

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


Юрий Зотов   (2008-01-21 16:44:00) [12]

> homm ©   (21.01.08 16:43) [32]

А разве [31] - не решение?


homm   (2008-01-21 16:43:00) [13]

> [31] Юрий Зотов ©   (21.01.08 16:37)

Юрий, это глупый спор. Я прекрасно понимаю, что заадча, в том виде, в котром она нужна автору, скорее всего решаема. Вы прекрасно понимаете, что задача, в том виде, в котром она была сформулированна автором, в Delphi не решаема в принципе. Предлагаю на этом и разойтись.


Юрий Зотов   (2008-01-21 16:37:00) [14]

> 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:33:00) [15]

> [27] @!!ex ©   (21.01.08 16:27)
> Ты придираешься к мелочам.

Да нет. Полный аналог функции eval в Delphi невозможен. Частные случаи, когда мы на этапе компиляции еще знаем, какие нам там понядобятся данные вообще не в счет.


wii   (2008-01-21 16:30:00) [16]

sc это TscriptControl


wii   (2008-01-21 16:29:00) [17]

Вообще я в свое время делал строковый калькулятор. Просто данная функция более гибкая и могла бы сократить код.

Вопрос по 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?


@!!ex   (2008-01-21 16:27:00) [18]

> [26] homm ©   (21.01.08 16:02)

Ты придираешься к мелочам. ИМХО


homm   (2008-01-21 16:02:00) [19]

> [25] Юрий Зотов ©   (21.01.08 15:58)
> Можно построить таблицу переменных (имя - адрес).

Кто этим будет заниматся? Функция eval? А она где эти данные возьмет?


> Можно передавать значения через параметры.

Сразу все возможные переменные, используемые в программе? А как интерпретируемиый код поймет, что где лежит?


Юрий Зотов   (2008-01-21 15:58:00) [20]

> homm ©   (21.01.08 15:47) [24]

> Есть проблемы со связью среды выполнения интерпетированного и
> нативного кода.

Можно построить таблицу переменных (имя - адрес). Можно передавать значения через параметры. Это решения? Решения.

> Но почему я не прав

Потому что [2] и [4] слишком грубо, а [11] - слишком категорично. Это конфа для начинающих, которые часто не умеют толком сформулировать вопрос. Поэтому стоило бы уточнить, что конкретно автору нужно. И либо объяснить, в чем он неправ, либо помочь. Но не [2] и [4]. Незнание основ в этойконфе - нормально.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо