![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интерпритатор языка или что-то в этом роде. [D5, D6, D7]
S0N1K © (2004-10-08 21:00:00)Как бы объяснить то, что я хочу сделать?... Надо сделать интерпритатор нес-ких стандартных команд(такой маленький язык).
Пишем (на русском) текст, а прога берёт из него команды и т.п.
и выполняет.
Например пишем:
объект перемещение на 2 вверх
объект перемещение на 3 влево
объект перемещение на 2 вправо
А в рез-те на клеточном поле показано куда переместился наш объект.
При этом могут быть и циклы, условия...
Если меня кто-то понял, то подскажите с какой стороны подступиться к решению.
Defunct (2004-10-11 05:07:00) [41]programania © (11.10.04 03:57)
посмотрите на мертвый проект
http://www.dca.narod.ru/simulation/mk51.htm
наглядная интерпретация
Defunct (2004-10-11 04:15:00) [42]> Работает как надо
Может быть для вас 2 пункта меню и есть "Работает как надо"?
Опишите хотя бы чего ждать от программы?
Скриншот выложите.
PS: не серьезен такой подход как у вас.
1. Пишете программу, допускаете ошибки на сайте поддержки, а это ведь лицо программы. (значит и в программе есть ошибки).
2. Нет нормального инсталлятора, приходится иметь дело с self-extract архивом "publisher - unknown" доверие к такой программе падает.
3. Интерфейс крайне непонятен (случайно нажал кнопку '=' меню съехало куда-то на бок). Без специальной подготовки с вашей программой разобраться нельзя.
Defunct (2004-10-11 04:06:00) [43][41]
Сделал именно так.
Результат - [37]
programania (2004-10-11 03:57:00) [44]>Defunct
Сам переписал Enlis.zip, распаковал
переписал туда же KADR.EXE запустил
ответил Yes to all
Запустил Enlis.exe
Работает как надо
>Несерьезно это чтобы программу из RAR архива вытаскивать.
Не надо вытаскивать надо запустить KADR.EXE и ответить
yes to all
Defunct (2004-10-11 03:44:00) [45]Напишите нормальную инсталляшку.
(в комплект поставки Delphi входит Install Shield Express)
Несерьезно это чтобы программу из RAR архива вытаскивать.
Defunct (2004-10-11 03:42:00) [46][38]
так и сделал. или демка выложена не рабочая. или я уже не знаю что.
programania (2004-10-11 03:36:00) [47]>Defunct
При распаковке Kadr.exe
нужно переписать т.е выбрать Yes to all
Defunct (2004-10-11 03:22:00) [48]programania © (11.10.04 03:07) [36]
Если это была шутка, то она не совсем удалась.
После распаковки KADR.EXE в один каталог с ENLIS, на экране все то же самое, что я привел в [35], разница лишь в том, что теперь меню (2 пункта "Помощь F1" и "Выход") вертикальное и при наведении на него мышки фон становится синеватым.
programania (2004-10-11 03:07:00) [49]>Defunct
Спасибо за тестирование моей программы Enlis
Это инструмент для создания
меню, форм ввода вывода обработки и т.п.
Чтобы это сделать нужно читать инструкции
или дописать к Enlis
programania.com/KADR.EXE 800kb как и указано на
странице под заголовком образец применения.
>программу не пришлось бы заново переписывать (а это и есть >отладка алгоритма).
Перепишите KADR.EXE и распакуйте это self Rar
Запустите ту же самую Enlis.exe
И тогда увидите что можно делать не переписывая программы
Defunct (2004-10-11 02:35:00) [50]programania © (11.10.04 01:38) [32]
> Кстати я наверно состряпал что-то похожее: programania.com/enlis.htm 800kb
Сходил по вышей ссылке, честно сказать мои подозрения оправдались:
С приведенной странички:
ENLIS
Engine of Lists
Что это за программа?
Это программа для работы с данными в виде таблиц. Она может работать с данными таких форматов:
- массив структур языка Паскаль на диске,
- DBF, DB, при наличии BDE или добавке из
особый интерес представляет ссылка:
RFK.htm - Описание клавишей программы"Редактор" для пользователей.
Ну да ладно, скачал. Распаковал. Проверил на вирусы, вроде бы чисто. Запустил.
При первом запуске появилась табличка:
M: не найден, содаю D:\.....\...\
Честно сказать не понял, что она там создала. Нажал ОК.
На экране вылезла красочная картинка на весь экран включаяя панель задачь, в виде лучей из центра экрана. Поразило обилие пунктов меню, аж 2 - "Помощь F1" и "Выход". Других инструментов не нашел, нажал выход.. вышло...
В том же каталоге нашел файл с именем RT.EXE и иконкой которую кажись D4 ставит по-умолчанию. Запустил...
В центре экрана появилась свернутая форма, которая через пару секунд развернулась на весь экран. Опять же поразило обилие инструментов - ни строки меню, ни панели инструментов... Форма представляет собой развернутый на весь экран TMemo и заголовок с гордой надписью "Редактор текста". Обрадовал тот факт, что в заголовке присутствует кнопка "закрыть". Закрыл...
В общем остались самые "радужные" впечатления о таком программном продукте.
Defunct (2004-10-11 02:10:00) [51]>> Похоже, Вы не видите разницы между отладкой программы и
>> отладкой ее алгоритма.
> Эт точно: в таких словесных дебрях я не силен
> Вот программы это другое дело
Для простоты понимания "дебрей" предлагаю вам доработать интерпретатор [18], чтобы он понимал:
Объект: <круг> <квадрат> <текстовое поле>
Команда: <создать> <переместить> <скрыть> <показать> <удалить> <изменить радиус> <изменить ширину> <изменить текст>
если бы ваш алгоритм учитывал внесение как новых объектов, так и новых действий над ними, тогда программу не пришлось бы заново переписывать (а это и есть отладка алгоритма).
Defunct (2004-10-11 01:51:00) [52]programania © (11.10.04 01:38) [32]
> если SON1K будет изучать БНФ и пр. точно ничего не сделает
> А поковыряв мою программу есть шанс.
Странно, но спасибо он сказал почему-то Юрию Зотову, а не вам.
>S0N1K (08.10.04 21:40) [4]
>> Юрий Зотов
> Огромное спасибо!!!
> Нарыл кучу материала, теперь буду разгребать:)
Да и, справедливости ради, пример [13] более показателен чем [18].
programania (2004-10-11 01:38:00) [53]>Юрий Зотов
Сожалею что ничего не знаю о вашей программе наверно 1с ее совсем задавила.
Кстати я наверно состряпал что-то похожее: programania.com/enlis.htm 800kb
правда без всяких теорий.
Интересно на вашу программу взглянуть, но судя по всему она не для модема.
>И этот кусок поддержки практически не требует
Как оказалось требует и поддерживается тогда конечно, не спихнули еще, извините.
>Можете назвать количество Ваших юзеров?
Не могу, многие работают без поддержки, но я никому не отказываю и без договора.
>Похоже, Вы не видите разницы между отладкой программы и отладкой ее алгоритма.
Эт точно: в таких словесных дебрях я не силен
Вот программы это другое дело
>А что, уже писали, раз так заявляете?
Написал:
1. Интерпретатор выражений арифметических, логических и c данными файлов.
2. Интерпретатор описания меню: пункты, команды, оформление и т.д.
3. Интерпретатор описания форм ввода: поля, кнопки, переходы и т.д.
4. Интерпретатор описания форм вывода итоги, листы, заголовки и т.д.
5. Интерпретатор Bat файлов: if call exist copy del shift goto и т.д.
6. Интерпретатор воспроизведения музыки, картинок c переменными, условиями и т.д.
все это без теорий размером примерно по 800kb можно взять на programania.com.
>только анализируя слова, переносила бы их по СТРОГИМ правилам русского языка
А вот что касается естественных языков теорию вы будете писать всю жизнь
и все равно будут исключения поэтому по СТРОГИМ правилам русского языка
я и пытаться не буду ведь язык живой он развивается не по правилам а как удобней.
И не надейтесь сделать интерпретатор естественного языка,
который будет всегда правильно работать: весь язык ни один человек не понимает,
но на ограниченном подмножестве это возможно.
Например, тот же интерпретатор за час: ведь его можно
считать интерпретатором ограниченного русского языка.
Кстати сложная программа обычно не во всех ситуациях правильно работает,
например delphi, и тем не менее может приносить большую пользу, так
что надо к этому стремиться насколько хватает ума и времени, смириться
с их нехваткой, и не мучать людей каверзными примерами для калькулятора.
>Или Вы полагаете, что их писали по Вашей методе - "на коленке"?
А ведь не пишут как писали гады: только придумали правила и сразу уже готовый
компилятор. Может стыдно писать потому что и правда "на коленке".
>Придет, это точно. Но еще лучше, если он придет к ним, не угробив сначала кучу времени на бессмысленный труд.
я пишу в этот форум не только для вас а для всех
почитайте что людям надо: решение конкретных проблем с программой
никто о теориях и не упоминает.
вспомните >Надо сделать интерпритатор нес-ких стандартных команд(такой маленький язык).
если SON1K будет изучать БНФ и пр. точно ничего не сделает
А поковыряв мою программу есть шанс.
>VMcL
>Особенное внимание, в частности, обратить на пост №681.
Калькулятор я написал еще в DOS и даже несколько раз переделал.
Возможно не все замысловатые выражения он вычисляет, но
используются даже до сих пор.
>KSergey
>Уймись, дите неразумное. На кого батон крошишь?
Пожалуста пишите по теме: про интерпретатор.
Юрий Зотов (2004-10-10 23:35:00) [54]> Defunct © (10.10.04 21:00) [30]
Вы правы. Второе слово тоже ни на что не влияет. И поэтому его тоже можно просто выбросить.
Позор на мои седины...
:о)
Defunct (2004-10-10 21:00:00) [55]>Юрий Зотов © (10.10.04 20:27) [29]
> только у него первое слово можно просто выбросить (оно ни на что не влияет).
второе слово помоему тоже..
PS: знаете, удивительно, ждал от Вас чего угодно, но только не этого:
> можно сделать и без всякой теории
Тем более, что вроде бы и не спорил о надобности теории. просто обратил внимание на время.
Юрий Зотов (2004-10-10 20:27:00) [56]> KSergey © (10.10.04 16:05) [20]
Естественно. Для того и выкладывал.
> ЮрийК © (10.10.04 17:32) [22]
В данном случае - с помощью головы. Задача слишком простая.
> Defunct © (10.10.04 19:18) [28]
Конечно, такие простейшие задачи (в Вашей первое слово предложения сразу является ключевым, а все дальнейшее определяется этим ключевым словом) можно сделать и без всякой теории (причем буквально в полсотни-сотню строк - что нам и продемонстирировал уважаеиый оппонент, только у него первое слово можно просто выбросить (оно ни на что не влияет), а ключевым является второе слово). Но стоит ввести во входной язык что-нибудь не столь однозначное - и все. Приплыли. И полезли в БНФ. Чтобы не тратить полжизни на переделки (которые почему-то называют отладкой).
Defunct (2004-10-10 19:18:00) [57]> Не могли бы Вы подтвердить свои слова делом? То есть взять - и написать за час работающий интерпретатор команд, который хотя бы не будет спотыкаться на каждом шагу. И выложить его здесь.
Однажды была задача сделать для устройства работающего без вмешательства человека простенький интерпретатор команд, для того чтобы можно было обновлять программное обеспечение удаленно (патч скрипт). Я вначале думал, что потребуется много времени на реализацию такового, но оказалось ушло порядка часа, а может и того меньше.
Написан на TP7, обрабатывает команды:
<команда> [<файл> <каталог>]
Может исполнять команды:
locate файл каталог (переместить файл в указанный каталог)
run файл каталог (запустить файл в указанном рабочем каталоге)
delete файл (удалить файл)
reboot (перезагрузить устройство)
две доп. команды create и register так и не были востребованы.
Unit Scripts;
Interface
Uses Folders, Streams, Sttdos, Dos;
Type
SmallString = String[20];
TSmallString = String[64];
PScriptRec = ^TScriptRec;
TScriptRec = Record
Line : String; { TDirDOSName;}
Command : SmallString;
Data1 : TSmallString;
Data2 : TSmallString;
Done : Boolean;
N : PScriptRec;
End;
TScriptPerformer = Object
Private
Root : PScriptRec;
Tail : PScriptRec;
FFolder : String;
FStream : TMemoryStream;
Procedure Report(Msg:String);
Procedure ReportLn(Msg:String);
Procedure PerformScript;
Procedure DoRegister(P:PScriptRec);
Procedure DoCreate(P:PScriptRec);
Procedure DoLocate(P:PScriptRec);
Procedure DoRun(P:PScriptRec);
Procedure DoReboot;
Procedure DoDelete(P:PScriptRec);
Public
N : Integer;
Enabled : Boolean;
Error : Integer;
CanShowReport : Boolean; {For debug }
Procedure SetFolder(Folder:String);
Procedure Load(ScriptFile:String);
Procedure Execute;
Procedure Clear;
Constructor Create;
Destructor Destroy;
End;
Const RebootEnabled : Boolean = False;
Procedure Reboot;
Implementation
{******************************}
{****** Script Performer ******}
{******************************}
Constructor TScriptPerformer.Create;
Begin
Enabled := False;
Root := Nil;
Tail := Nil;
Error := 0;
CanShowReport := True;
FFolder := '.';
FStream.Create;
End;
Procedure TScriptPerformer.Report;
Begin
If CanShowReport Then Write(Msg);
End;
Procedure TScriptPerformer.ReportLn;
Begin
If CanShowReport Then WriteLn(Msg);
End;
Procedure TScriptPerformer.Clear;
Var P,P2:PScriptRec;
Begin
P := Root;
While P<>Nil Do
Begin
P2 := P;
P := P^.N;
Dispose(P2);
End;
Root := Nil;
End;
Procedure TScriptPerformer.PerformScript;
Var P : PScriptRec;
SubStr : String;
Current : Integer;
HCounter : Integer;
Begin
Error := 0;
If Enabled Then
Begin
P := Root;
While P<>Nil Do
Begin
Current := 1;
HCounter := 0;
SubStr := '';
While Current<=Length(P^.Line) Do
Begin
If P^.Line[Current]<>' ' Then SubStr := SubStr + P^.Line[Current] Else
If SubStr<>'' Then
Begin
Case HCounter Of
0: P^.Command := SubStr;
1: P^.Data1 := SubStr;
2: P^.Data2 := SubStr;
Else Inc(Error);
End;
Inc(HCounter);
SubStr := '';
End;
Inc(Current);
End;
If (SubStr<>'') And (HCounter<3) Then
Case HCounter Of
0: P^.Command := SubStr;
1: P^.Data1 := SubStr;
2: P^.Data2 := SubStr;
End;
P := P^.N;
End;
End
End;
Procedure TScriptPerformer.SetFolder;
Begin
FFolder := Folder;
End;
Procedure TScriptPerformer.Load;
Var F:Text;
P,PL:PScriptRec;
Begin
{$I-}
If FileExists(FFolder + ScriptFile) Then
Begin
Assign(F, FFolder + ScriptFile);
Reset(F);
PL := Nil;
N := 0;
Report('reading script.');
While Not Eof(F) Do
Begin
New(P);
ReadLn(F,P^.Line);
If PL<>Nil Then PL^.N := P
Else Root := P;
PL := P;
Inc(N);
Report('.');
End;
ReportLn(' '+Int2String(N)+' lines done');
Close(F);
If IOResult = 0 Then Enabled := True
Else Enabled := False;
End;
{$I+}
End;
Procedure TScriptPerformer.DoRegister;
Begin
ReportLn('Registering key '+P^.Data1+' value: '+P^.Data2+' .....done');
End;
Procedure TScriptPerformer.DoCreate;
Begin
End;
Procedure TScriptPerformer.DoLocate;
Var FC:TFolderControl;
Begin
FC.Init;
FC.Load(P^.Data2);
If Not FC.Exists Then
Begin
Report('folder not exists, creating '+FC.Name);
FC.CreateFolder;
If FC.Error>0 Then ReportLn('failed')
Else ReportLn('done');
End;
If FileExists(FFolder + P^.Data1) Then
Begin
Report('Relocating file '+P^.Data1+' ');
FStream.LoadFromFile(FFolder + P^.Data1);
FStream.SaveToFile(FC.ExpandFilePath(P^.Data1));
ReportLn('done');
End;
FC.Done;
End;
Procedure TScriptPerformer.DoRun;
Begin
Report('Executing '+P^.Data1+' ');
If Not FileExists(P^.Data1) Then
Begin
ReportLn('failed');
Exit;
End;
ReportLn('available memory: '+ Int2String(MaxAvail div 1024)+'Kb');
Exec(P^.Data1,P^.Data2);
End;
Procedure TScriptPerformer.DoDelete;
Var F:File;
Begin
Report('Deleting '+P^.Data1+' ');
If Not FileExists(P^.Data1) Then
Begin
ReportLn('failed');
Exit;
End;
ReportLn('done');
Assign(F, P^.Data1);
Erase(F);
End;
Procedure TScriptPerformer.DoReboot;
Begin
RebootEnabled := True;
End;
Procedure TScriptPerformer.Execute;
Var P: PScriptRec;
Begin
PerformScript;
If Error=0 Then
Begin
P := Root;
While P<>Nil Do
Begin
If P^.Command = 'register' Then DoRegister(P);
If P^.Command = 'create' Then DoCreate(P);
If P^.Command = 'locate' Then DoLocate(P);
If P^.Command = 'run' Then DoRun(P);
If P^.Command = 'reboot' Then DoReboot;
If P^.Command = 'delete' Then DoDelete(P);
P := P^.N;
End
End Else ReportLn('Error, could not perform the script due to errors');
End;
Destructor TScriptPerformer.Destroy;
Begin
Clear;
FStream.Destroy;
End;
{******************************}
Procedure Reboot;Assembler;
Asm
Db 0EAh, 0,0, 0FFh, 0FFh
End;
End.
VMcL (2004-10-10 18:23:00) [58]>> ЮрийК © (10.10.04 17:47) [26]
<offtopic>
Просто её отредактируй ("Редактировать анкету"):
http://www.delphimaster.ru/anketa/index.html#a3
</offtopic>
ЮрийК (2004-10-10 17:47:00) [59]VMcL:
Спасибо за совет по JCF, будем смотреть.
"P.S. Анкету обнови."
Что требует обновления и куда кликать для обновления анкеты?
VMcL (2004-10-10 17:38:00) [60]>> Palladin © (10.10.04 17:36) [23]
:))