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

Вниз

Люди помогите   Найти похожие ветки 

 
IceMan   (2004-10-20 12:04) [0]

Я описал тип
type
TFunction:function(x:real):real;
Мне надо написать функцию перевода строки в этот тип.
function StrToFunction(s:string):TFunction;

Например:
var
  S:string;
...
Begin
 S:="cos(x)+5*sin(2+3*x)";
Как Сделать так что-бы эту фигню прога воспринимала как функцию


 
Андрей ©   (2004-10-20 12:55) [1]

Вообще-то вопрос не по теме конференции...
И удалит его модератор...
Но я отвечу, т.к. настроение у меня сегодня хорошее :)

Как ты думаешь, зачем нужен компилятор?
Ну, собственно, неважно, что ты думаешь, суть в следующем

Если ты напишешь в программе

y:=cos(x)+5*sin(2+3*x);

то компилятор проанализирует синтаксис этой конструкции на соответствие правилам своего языка, и, если все правильно,
откомпилирует это в следующую цепочку действий (примерно,
поэтому прошу ногами не пинать)

1. Взять значение X и поместить его в стек сопроцессора
2. Поместить 3 в стек сопроцессора
3. Перемножить два верхних числа и результат поместить обратно в стек сопроцессора
4. Поместить 2 в стек сопроцессора
5. Сложить два верхних числа и результат поместить обратно в стек сопроцессора
6. Взять значение X и занести его в регистры или обычный стек
7. Вызвать функцию cos
8. Полученный результат поместить из регистров в стек сопроцессора
9. Сложить два верхних числа и результат поместить обратно в стек сопроцессора
10. Взять верхнее число из стека сопроцессора и поместить его в ячейку Y

Причем это будет ФИКСИРОВАНЫЙ порядок действий, и если ты захочешь его изменить, программу надо перекомпилировать.

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

Теперь о твоей конструкции
S:="cos(x)+5*sin(2+3*x)";

Это просто строковая константа, которую компилятор
сохранит в область данных, а в коде будет присвоение и ничего более.
-------
Значит, чтобы реализовать свою задачу, ты должен написать СВОЙ синтаксический анализатор и, например, интерпретатор.
Или взять готовый и встроить в свою программу.

В любом случае, ни Delphi ни KOL тебе не помогут.
Если хочешь поручить разбор такой конструкции компилятору своего кода, пиши программу на FoxPro


 
Gandalf ©   (2004-10-30 13:01) [2]

Тебе нужн парсер. Это оффтоп. Иди на torry.



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

Текущий архив: 2005.06.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.05 c
3-1114835348
dEd
2005-04-30 08:29
2005.06.06
ADO + целостность данных


9-1104794378
Xenon
2005-01-04 02:19
2005.06.06
Вот одна из моих первых игр


14-1116271689
dazfx
2005-05-16 23:28
2005.06.06
Программа для сканирования сети


3-1114683770
mariya_mezenceva
2005-04-28 14:22
2005.06.06
проблема связи ado и dbase VI


10-1093524855
Ragazor
2004-08-26 16:54
2005.06.06
Как в Excel задать фомат всем ячейкам - текст? (OLE)