![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Shaman2008 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 21.6.2008 Репутация: нет Всего: нет |
Скопировал с форума cyberforum. Простите.
Привет всем! Хочу попросить совет. Хочу написать программу, в которой можно было бы "чуток программировать". Предполагаю, что необходимо встроить в свою программу простенький интерпретатор. Но так ли это? Задача такая: Программа должна уметь читать написанный в ней код (скрипт) и выполнять определенные команды, описанные в этом коде (скрипте). На сколько сложно реализовать данную задачу? Допустим, нужно, чтобы в программе был глобальный массив целочисленных переменных с индексами 0-999, для которых можно было бы задать имя и логику обработки. Чтобы можно было выполнять над ними простые арифметические операции и использовать логические конструкции. Например: Per 0 Name Peremennaya_0; //Задаем нулевой глобальной переменной имя. Per 1 Name Peremennaya_1; //Задаем первой глобальной переменной имя и описываем логику ее обработки. {if Per1 > 0 [Per0 = 1], [Per0 = 0];} {} - Обозначают начало и конец области описания логики обработки при изменении этой (Peremennaya_1) переменной. Конструкция: if <выражение> [<выражение если true>], [<выражение если false>]. То есть, когда переменная "Peremennaya_1" примет какое-то значение (изменит его), должен будет выполниться код заключенный в {}. И, соответственно, если "Peremennaya_1" будет больше 0, то переменная "Peremennaya_0" примет значение 1. Если меньше, то "Peremennaya_0" примет значение 0. С глобальным многомерным массивом (0-999) в принципе все понятно. А вот как реализовать остальное? Подскажите пожалуйста. На сколько сложно будет написать свой интерпретатор с такими возможностями? Или проще взять готовый (какой) и его пристроить в свою программу? Сразу скажу, подобного опыта еще не было. Программу пишу для себя. На cyber посоветовали посмотреть в сторону LUA. Но мне кажется он ОЧЕНЬ навороченный для моих задач. Подскажите, на сколько сложно написать свой интерпретатор? Пускай даже самый простенький? Объясните пожалуйста принцип в общих чертах, чтоб вообще иметь представление как работает интерпретатор... Заранее спасибо! |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
В общем ты на правильном пути, либо писать свой, либо взять готовый. Минус первого варианта в том, что это очень трудозатратно. Даже если ты напишешь конкретно под свою задачу, через месяц может выясниться, что тебе нужно еще кое-чего добавить и придется все дорабатывать (если не писать заново). Минус второго варианта в том, что нужно изучать что-то новое. Когда я сталкнулся с таким вопросом, то выбрал второй путь. Есть несколько вариантов реализации, я и про LUI читал, и кто-то свою личную наработку выкладывал, но решил остановиться на RemObject Pascal Script. Можешь глянуть в его сторону, по-моему вполне достойный. Если все-таки решишь писать свое, то принцип тут элементарный: парсишь текст, определяешь команды, отправляешь на выполнение. Но сделать это, учесть нюансы, ой как не просто.
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| Shaman2008 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 21.6.2008 Репутация: нет Всего: нет |
Спасибо за ответ! Вот именно его я и скачал первым, в поисках ответа на свой вопрос. А Вы с ним работали? Можете мне помочь со стартом? Я в общем то не глупый и понимаю, что придется для начала изучить данный скриптовый движок, но мне надо совсем чуть-чуть. Я посмотрел на ссылки (примеры) для Pascal Script. Мягко выражаясь - не понял, как его вмонтировать в свое приложение. Вы не пинайте сильно, в принципе с ООП знаком, даже свои события в своих компонентах создавал и описывал типы указывающие на функции (это не для хвастовства, а к тому, что чуток соображаю в Дельфи). Но вот со скриптовыми языками сталкиваться пока не приходилось... Если не сложно, примитивный пример с использованием Pascal Script можно у Вас попросить? Заранее спасибо! Это сообщение отредактировал(а) Shaman2008 - 14.9.2013, 12:57 |
|||
|
||||
| jsharp36 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 8.10.2011 Репутация: нет Всего: 1 |
Лучше однозначно пользоваться готовым. Интерпретатор свой написать и сложно и не сложно. Зависит от задачи, от количества операций в интерпретаторе и тому подобное. Я не советовал бы начинать писать, пока не изучите книгу:
http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%BD%D1%82%D1%8B Считаю книгу полезным багажом знаний для любого серьезного программиста. Иногда приходится писать интерпретаторы/компиляторы, даже если не это специализация. Ничего сложного в написании интерпретатора как бы нет (если не собираетесь писать супероптимальный компилятор), но трудозатраты обычно не маленькие. Даже не смотря на то, что есть генераторы парсеров, облегчающие написание. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
| jsharp36 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 8.10.2011 Репутация: нет Всего: 1 |
Я пробовал писать интерпретаторы, еще до того, когда изучил предлагаемую книгу. И получалось. И даже не сказать, что принципиально я что-то делал не так, как надо. Но у меня был ацкий говнокод, такая лапша, что развивать те интерпретаторы не было возможностей. Когда прочитал, всё уложилось в стройную модель. Так что советую прочитать.
Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 8 Всего: 329 |
я бы взял готовый
Добавлено @ 16:26 http://forum.vingrad.ru/forum/topic-307217.html Есть ещё FastScript, TMS Scripter, paxCompiler, LMD ScriptPack, RemObjects Pascal Script. |
|||
|
||||
| Shaman2008 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 21.6.2008 Репутация: нет Всего: нет |
Спасибо за ответ! Вы не будите против, если я, после изучения данной книги обращусь к Вам за помощью, если что-то для меня станет не понятным? Если нет, без проблем, только скажите! В любом случае спасибо!
Спасибо за ответ! В общем то, я так и думал! И скачал и поставил RemObjects Pascal Script. Но пришел к выводу, что нужно хотя бы представлять, как это работает. Потому как, если возникнут какие-либо ошибки, связанные с использованием готовых движков, то я думаю у меня руки будут сразу связаны. А так я хоть буду иметь представление почему и примерно где произошла ошибка. Возможно такого не будет. Но у меня, в общем то, совсем простые требования к интерпретатору, который мне нужен. И я думаю, что все таки необходимо хотя бы чуть-чуть приоткрыть для себя завесу в этой интересной теме. Спасибо всем большое! |
||||
|
|||||
| jsharp36 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 8.10.2011 Репутация: нет Всего: 1 |
Нет, конечно. Правда, я давненько ее читал, не помню многое. Но в общем, книга классическая. Как писать компиляторы - учатся по ней. Не только компиляторы. Точнее - как писать трансляторы. В англоязычном варианте компилятор и транслятор - одно и то же. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
| jsharp36 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 8.10.2011 Репутация: нет Всего: 1 |
||||
|
||||
| Shaman2008 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 21.6.2008 Репутация: нет Всего: нет |
Спасибо за ответы и советы!
|
|||
|
||||
| Poseidon |
|
||||||||||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
В окне нашей программы в Memo пишем скрипт, который запускает на выполнение нашу TestProcedure и передает ей 100 в качестве аргумента.
Пример простенький, но показывает как можно из скрипта вызвать код, который написан внутри программы. Если будут другие вопросы, то лучше создай отдельную тему. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||||||||||
|
|||||||||||||
| Shaman2008 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 21.6.2008 Репутация: нет Всего: нет |
Poseidon, спасибо! В принципе, все понятно! Думаю, практика покажет остальное!
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |