Может есть у кого опыт, инфа, доки по сабжу ? поделитесь плизз ...
как лучше / быстрее / проще замутить сабж ... а то тут начал , жрет памяти много и тормозит ....
Может есть у кого опыт, инфа, доки по сабжу ? поделитесь плизз ...
как лучше / быстрее / проще замутить сабж ... а то тут начал , жрет памяти много и тормозит ....
так...в чем суть...вводишь строку, потом проверяешь первое слово на возможность совпадения с заданным списком команд ...если такое совпадение было, то выполняем нужную процедуру...иначе - неизвестная команда
поидее тормозить сильно не должно, если конечно у тя не 1000 команд
Телевизор — это просто маленькое прозрачное окошко в трубе духовного мусоропровода. © В. Пелевин.
я понял почему у меня тормозило - неправильно использовал ТСтрингЛист .... тень всё ок... а как мне сделать всякие там IfThenElse и ForToDo ?
Подчитать теорию ;) ТАК интерпретаторы/компиляторы не пишут. Разумным вариантом например явлеться использование спецязыков типа bison/yacc. Для данной задачи декларативное программирование вполне себе рулит.Сообщение от _jf_
аффигеть ..... ну "а как мне сделать то-то , то-то"-"подчитать теорию" Ну научи меня писать интерпретаторы (компиляторы не надо и про спец языки не надо), теорию расскажи, расскажи про декларированное программирование , ссылками конкретными поделись ... ну хоть что нибудь !
ЗЫ
имхо равносильно послать в яндекс (много в яндексе просидел, но ничего толкового не нашёл !)
Ты, однака, простооой ;) Ты просто пойми - создание хотябы даже интерпретаторов - это _РЕАЛЬНО_ одна из самых сложных существующих задачь. Да, есть лобовой путь, которым ты собсна и начал идти - парсить все ручками - но ведет в тупик.Сообщение от _jf_
Если очень поднатужиться, для не очень сложного язычка еще можно что-то сделать, но это будет здоровое и дико запутанное глюковище. Посему, используют более другие пути - в частности, декларативное программирование. Его суть - в том, что ты пишешь не программу которая решает твою задачу, а программу, которая пишет программу которая решает твою задачу ;) Ну, это ессно очень упрощенное изложение. Но зато очень меморабельное. Но чтобы пользоваться средствами специально созданными для этой цели ты должен хорошо знать саму теорию компиляторов/интерпретаторов. Такие вещи как грамматика Бэкуса-Науэра или, например, контекстно-зависимая граматика должны отлетать отзубно. Учти, один фиг, дело это весьма мозгонапряжное. особливо по началу.
Попробуй почитать для начала хотябы http://www.megaupload.com/?d=HSIYSVV3 или http://rapidshare.de/files/6936486/S...s.ru_.rar.html
(9mb) - (это один и тот же файл с разных хостингов) Но не ожидай что все тайны раскроються так сразу. После этой книги ты будешь иметь хоть какое-то представление о теории.
да мне нафиг не нужно супер мощное средство ! Простой интрепретатор команд, с поддержкой нелинейниых алгоритмов. Усложнять его в моём проекте нету смысла и парсить лучше ручками ! ИМХО для великих целей лучше юзать какой нить уже готовый обрботчик типа TCL , Perl и т.п.. в конце то концов ...
Мне по идее нужен простой текстовый парсер , нежели супер теория по построению компиляторов
ЗЫ а откуда у тебя такие знания о декларированном программировании и т.п. ?
В том-то и проблема, что простых парсеров не бывает. У тебя два выхода - или таки учить теорию, или интегрировать например lua туда. Учитывая, что lua создавался именно для этого - особых проблем быть не должно. Интеграция tcl/перл - несколько пахнет извратом. Имхо.Сообщение от _jf_
Дак ыть. Книжки умные читаем-c :cool: ;)Сообщение от _jf_
К тому же, что не говори, а *nix системы по дефолту представляют собой среду для разработки, причем - достаточно накрученную. Жить среди них - и не научиться всем этим пользоваться - или хотябы не узнать что это есть такое - сложно. *nix коммунити в среднем намного продвинутей. Что есть большой и толстый плюс. Даже если бы у *nix небыло других приемуществ - их бы стоило юзать только из-за этого.
что ты понимаешь под простыс парсером ? вот простой парсер на Delphi :Сообщение от aSj
var script:TStringList;
begin
script:=TStringList.Create;
script.loadfromfile('script.txt');
if script[0]='beep' then beep;
script.free;
end;
Ну чем не парсер ?
tcl/perl такойже изврат как LUA имхо.Сообщение от aSj
Ладно, поправлюсь - простых Тьюринг-полных/ достататочно близких к Тьюринг-полным чтобы быть _РЕАЛЬНО_ полезными не бывает. ;)Сообщение от _jf_
Кстати, если хочешь посмотерть сырцы более-менее простенького но тем не менее - неплохого интерпретатора, можешь глянуть на gnu-сный bc из *nix-like. Это нечто вроде комстрокового калькулятора. Но он практически Тьюринг-полный, тобишь - циклы/условные операторы в нем таки есть. Сорсы весят всего 600kb (распакованные) из которых килобайт 150-200 эта всякая фигня типа документации и makefile-ов.
Хотя, в общем-то сорсы lua-интерпретатора весят не намного больше.
Вообще говоря, он достаточно полезная штука, я им пользуюсь регулярно. Все гуи-калькуляторы сакс (по крайней мере, которые я видел). Задачи близкой сложности к тем которые я решаю на bc можно делать
разве что на к-нить табличном процессоре а-ля excel, но там это получаеться намного медленней и геморройней. Да и вообще, в большинстве случаев excel - это overkill.
...и вообще, все на свете изврат ;)Сообщение от _jf_
Просто, lua хотябы изначально создавался для интеграции в разные приложения.
И, по сути он и распространяеться как lgpl-библиотека. Инлюды там весят всего килобайт 20-30, документация побольше, килобайт 150 plain-text. В общем, за вечер вполне можно разобраться.
С TCL/perl придеться помучиться побольше. Хотя, можно например просто предоставить некий интерфейс к твоей программе - ну, например, банальный вариант - через сокет/другой IPC, а там уж - кто на чем хочет, тот пусть на том и лепит. Ну или еще более простой вариант с плагинами.
А как же теория конечных автоматов?..
Многие говорят (они, конечно ошибаются), что КА нужны только для разбора текста - в xml/компиляторах и т.п.
Ты думаешь, я снова про теорию говорю? Отнюдь, КА - это оченб просто!
Google тебе поможет...
Последний раз редактировалось DigiUser; 09.04.2006 в 13:26.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)