Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2010, 13:13   #1
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
Печаль Парсер, выполнение кода.

Доброго всем! Проблема в том, что мне нужно реализовывать выполнение кода записаного в отдельном файле (например sourse.txt) я, предположим, написал парсер который разбивает все как положено на операторы и переменные. Но вот как это все выполнить? Наверное нужно как то в памяти разместить, но я совершенно не понимаю как Если не тяжело разъясните как это делаеться на примере если получаем, например:

Код:
var
 i: integer;
или

Код:
if i=1 then
PS Код написан на паскале.
В планах порабощение вселенной...

Последний раз редактировалось zumm; 29.06.2010 в 19:19.
zumm вне форума Ответить с цитированием
Старый 29.06.2010, 13:39   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Под переменные можно затратить динамический массив . Допустим структура имя (String) и значение (Variant)
Выполнить все тоже просто. Раз разбивает делаете промежуточную компиляцию в код, где каждое действие имеет свой числовой номер. А затем через оператор case .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.06.2010, 13:48   #3
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Utkin, вот меня и интересует, что делать в операторе case? Например у нас есть:

Код:
if opCode='if' then
 index:=1;
case index of
 1: ???// я без понятия что тут должно быть :(
 ...
end;
В планах порабощение вселенной...

Последний раз редактировалось zumm; 29.06.2010 в 19:20.
zumm вне форума Ответить с цитированием
Старый 29.06.2010, 13:56   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну такой вариант - сначала проходишься по всем строкам и упаковываешь их в специальный вид. Итак вся программа это массив строк. Ты переводишь их в массив структур вида: идентификатор структуры, набор параметров (ну скажем пять или шесть каких то данных, Variant или String, разберешься по обстоятельствам).
Ну вот:
Код:
if i=1 then
Код:
1: begin
        Читаешь параметры
        Провести сравнение первого параметра со третьим
        Верно ли сравнение с операцией равно?
        Да - выполним четвертый параметр (если он есть)
        Нет - выполним пятый параметр (если он есть) 
end;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.06.2010, 14:03   #5
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Это уже батенька интерпретатор.
VintProg вне форума Ответить с цитированием
Старый 29.06.2010, 14:05   #6
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

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

Содержимое файла source.txt:

Код:
var
 i: integer;
begin
 i:=1;
 if i=1 then
  ShowMessage('+'); \\ я знаю что в паскале нет этой функции, но это для наглядности :)
end.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 29.06.2010, 14:09   #7
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Сначало надо объявить тип глобальных переменных интерпретатора:

Код:
Type
 T_VARS = Record
   Value : pointer;    //Это значение
   Id     : pAnsiChar; //это имя переменной в скрипте
  END;


type
   GLOBAL_VARS : array of T_VARS; - сама вереница переменных.
А много поточный ты хочеш сделать?
А и еще так это все не объясниш, статью писать надо.

Последний раз редактировалось VintProg; 29.06.2010 в 14:15. Причина: Ошибся не смейтись?
VintProg вне форума Ответить с цитированием
Старый 29.06.2010, 14:25   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Я же тебе сказал как. Загоняешь строки в массив и смотришь что есть что. А потом цикл по числу элементов в массиве.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 29.06.2010, 14:29   #9
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
Я же тебе сказал как. Загоняешь строки в массив и смотришь что есть что. А потом цикл по числу элементов в массиве.
А можно и в память поднять, а потом их обрабатывать там.
VintProg вне форума Ответить с цитированием
Старый 29.06.2010, 15:54   #10
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Народ, перед вами нуб обыкновенный, поэтому сори конешно за тупость, но мне тяжело понять, как его именно выполнить?!

Код:
Я же тебе сказал как. Загоняешь строки в массив и смотришь что есть что. А потом цикл по числу элементов в массиве.
Я ничего не понял...

Цитата:
Сначало надо объявить тип глобальных переменных интерпретатора:

Код:
Type
 T_VARS = Record
   Value : pointer;    //Это значение
   Id     : pAnsiChar; //это имя переменной в скрипте
  END;


type
   GLOBAL_VARS : array of T_VARS; - сама вереница переменных.
А много поточный ты хочеш сделать?
А и еще так это все не объясниш, статью писать надо.
Вот тут попонятнее, пример всегда лучше сухой теории Делать планируется многопоточным выполнением, тоесть будет отдельно ыполнение самого скрипта и отдельно программы.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли ускорить выполнение этого кода? Velross Помощь студентам 3 07.01.2010 19:37
Выполнение строки как кода в Delphi Asteroid Общие вопросы Delphi 11 21.09.2009 18:46
.htaccess запрет на выполнение кода wall66 PHP 3 11.08.2009 10:54
Выполнение кода из файла.. NSvirus Паскаль, Turbo Pascal, PascalABC.NET 25 14.06.2009 00:56
обновление в блоге - Быстрый парсер html кода на Delphi Pblog Обсуждение статей 0 09.08.2008 22:10