forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   MidletPascal (http://forum.boolean.name/forumdisplay.php?f=46)
-   -   Интерпретатор в телефоне (http://forum.boolean.name/showthread.php?t=7363)

DixaDel 23.11.2008 00:17

Интерпретатор в телефоне
 
Привет, программеры! У меня тут зародилысь идейка - создать некое подобие какого-нить языка (ну конечно же это Паскакаль:) ) Главное то, чтобы он работал в телефоне. То есть берём свою любимую трубу, пишем прогу, а он(телефон) эту прогу интерпритирует(по-моему это правильное слово). Типа бейсика что-то сделать... Кто как на этот счёт думает?

ViNT 23.11.2008 01:49

Ответ: Интерпретатор в телефоне
 
Во-первых, нечто подобное уже есть, правда для сименсов + есть интерпретатор(правда, не совсем паскаль, написанный одним из местных кодеров) http://forum.boolean.name/showthread.php?t=7262 Во-вторых, интерпретатор - это тормоза, мороки много, а толку мало. В-третьих, как-то обломно текст программы на клавиатуре тела набирать.

DixaDel 23.11.2008 02:03

Ответ: Интерпретатор в телефоне
 
В этом - то всё и дело!!!:wild: Сделать не что-то подобное, а своё, родное:rolleyes: Потом помнишь Delphi? так вот, там есть такая фишка - вводишь типизированную переменную(может даже имя объекта), жмёшь точку, вылазит окошко со свойствами этого объекта. Так вот, так же можно поступить и с зарезервированными словами. Ввёл первую букву, он тебе дал список зарезервированных слов на эту букву, дальше полистал, выбрал слово, нажал на OK и оно уже введено. Тут можно будет её дочиканить до того, что нужно будет вводить полностью только новые названия типов, переменных, констант и т.д. Как на это смотришь?
А вот насчёт тормозов интерпритатора - будем усовершенствовать так, пока не будет работать как на компе на эмуляторе.(по-моему так можно:dontknow: )

Phantom 23.11.2008 04:57

Ответ: Интерпретатор в телефоне
 
Цитата:

там есть такая фишка - вводишь типизированную переменную(может даже имя объекта), жмёшь точку, вылазит окошко со свойствами этого объекта. Так вот, так же можно поступить и с зарезервированными словами. Ввёл первую букву, он тебе дал список зарезервированных слов на эту букву, дальше полистал, выбрал слово, нажал на OK и оно уже введено.
И как ты это будешь делать? Будешь ввод с клавиатуры в канвасе реализовывать? Верх извращенства...

DixaDel 23.11.2008 08:11

Ответ: Интерпретатор в телефоне
 
Цитата:

Сообщение от Phantom_wc (Сообщение 91129)
И как ты это будешь делать? Будешь ввод с клавиатуры в канвасе реализовывать? Верх извращенства...

Помнится встретилась мне тут на форуме одна замечательная прога. Зовут её BrainFuck(Название архива BF(ссылку не укажу(непомню, где она))). Так вот, там была продемонстрированна реализация такого замечательного метода(альтернативный ввод - вроде бы её название(извиняюсь за неграмотность...)). Оттуда можно его вытянуть.


Кстати, посидел, подумал, а если представить, что программа будет занимать очень много текста, тогда выбор нужного компонента/переменной/объекта будет ну просто оччень большим...

Phantom 23.11.2008 13:53

Ответ: Интерпретатор в телефоне
 
Цитата:

там была продемонстрированна реализация такого замечательного метода(альтернативный ввод - вроде бы её название(извиняюсь за неграмотность...)). Оттуда можно его вытянуть.
И распрощайся с Т9 + появятся тормоза на разных мобилах + раскладка клавиатуры на различных мобилах отличается.

TahirBySky 28.03.2009 17:30

Ответ: Интерпретатор в телефоне
 
Цитата:

Сообщение от DixaDel (Сообщение 91113)
Привет, программеры! У меня тут зародилысь идейка - создать некое подобие какого-нить языка (ну конечно же это Паскакаль:) ) Главное то, чтобы он работал в телефоне. То есть берём свою любимую трубу, пишем прогу, а он(телефон) эту прогу интерпритирует(по-моему это правильное слово). Типа бейсика что-то сделать... Кто как на этот счёт думает?

как сделать пока не знаю но вещь полезная ведь можно программировать в в любом месте в любое время!!

Slezka 03.04.2009 17:35

Ответ: Интерпретатор в телефоне
 
А вы знаете про lm2j+jtome+perefekator=Java..
Еще есть для телефона, ява компилятор, могу ссылки дать

KAK? TAK! 03.04.2009 19:47

Ответ: Интерпретатор в телефоне
 
ага
!!!!!!!!!скинь

liery 26.04.2009 14:37

Ответ: Интерпретатор в телефоне
 
кто нибудь пробовал делать интерпретатор паскаля? я попробовал и вот что пока получилось
program pascal;
{-----------------------------------------------------------------}
var
tm:array[1..40] of string; // максимальное к-во пунктов
vars:array[1..40] of string; {имена переменных}
values:array[1..40] of string;{значения переменных, каждая переменная имеет свой ид номер в 2 массивах одинаков}
lines:integer;
vas:integer;
{---------------------------------------------------------------}
function getidforname(name:string):integer;
var ad:integer;
begin
for ad:=1 to 40 do
begin
if vars[ad] = name then getidforname:=ad break;
end;
end;
{-----------------------------------------------------------------}
function getnameforid(id:string):string;
var ads:integer;
begin
for ads:=1 to 40 do
begin
if vars[ads]=id then getnameforid:=vars[ads] break;
end;
end;
{---------------------------------------------------------------------}
procedure setvalue(variable,value:string);
var temp:integer;
begin
temp:=getidforname(variable);
values[temp]:=value;
end;
{---------------------------------------------------------------------}
procedure soob(t: string);{ вывод сообщения. также удобно искать ошибки}
var n,m,r,n1: integer;
begin
n:= getStringWidth(t);m:= getStringHeight(t);{ n - ширина m - высота строки текста }
setColor(145,135,255);fillrect((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10);{ очищаем прямоугольник под текст }
setColor(140,10,35); if n<=getWidth then drawText(t, (getWidth - n) / 2,(getHeight - m) / 2); { центруем и печатаем если целикомпомещается на экране }
else begin r:=n-getWidth; for n1:=0 to r do begin { вычисляем сколько пикселей не влезло }
setColor(145,135,255);fillrect((getWidth - n) / 2-3,(getHeight - m) / 2-3,n+6,m+6); { если не очистить просто смажется }
setColor(140,10,35);drawText(t,0-n1,(getHeight - m) / 2);repaint; delay(10);{ центруем и печатаем }
if n1=0 then delay(2000);end;end; { задержка что б прочесть начало строки }
repaint;delay(1000);setColor(145,135,255);fillrect ((getWidth - n) / 2-5,(getHeight - m) / 2-5,n+10,m+10);
end;
{----------------------------------------------------------------------------------------------}
procedure massivizstroki(stroka:string);{процедура создает массив из строки,писал ее не я,а 12121}
var
n:integer; // убрал лишние переменные
begin
lines:=1;// - будет количество получившихся строк
tm[1]:=''; // что бы с прошлого вызова ничего не осталось
for n:=1 to length(stroka) do begin //разбивка на пункты
if copy(stroka,n-1,n)=';' then begin lines:=lines+1;tm[lines]:='';n:=n+1; end;
if copy(stroka,n-1,n)<>' ' then tm[lines]:=tm[lines]+copy(stroka,n-1,n); // вырезаем пробелы каторые могут быть
// иначе могут быть неувязки при проверке ведь 'end'<>' end'
end;
end;{не хватало end;}

procedure vabr(strok:string);
var
i:integer; // убрал лишние переменные
begin
vas:=1;// - будет количество получившихся строк
vars[1]:=''; // что бы с прошлого вызова ничего не осталось
for i:=1 to length(strok) do begin //разбивка на пункты
if copy(strok,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end;
if copy(strok,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(strok,i-1,i); // вырезаем пробелы каторые могут быть
// иначе могут быть неувязки при проверке ведь 'end'<>' end'
end;
{---------------------Cоздание переменных-------------------------------------------}

end;
{-----------------------------------------------}
procedure write(what:string;del:integer);
begin
drawText(what, 0, 0);
repaint;
delay(del);
end;
{------------------------------------------------}
procedure main;
var h:integer;
hel,lel:string;
hellen:integer;
begin

for h:=1 to lines do
begin
hel:=tm[h];// soob(hel);
hellen:=Length(hel);
if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end;
if copy(hel,0,2)='var' then begin lel:=copy(hel,4,hellen); vabr(lel); end;
end;
end;
{------------------------------------------------}
begin
massivizstroki('program beg;var a,b,c;begin;write("helloworld");end');
main;
end.

Richik 06.05.2009 16:29

Ответ: Интерпретатор в телефоне
 
Прикольно).., этому коду нужно подключить кучу библиотек, сделать возможность сохранение и загрузку pac-файлов с фс телефона, написать интерфейс и ваять )

Трава 05.08.2009 20:08

Ответ: Интерпретатор в телефоне
 
Ну... Не знаю, я делал на VB интерпретаторы и виртуальные машины. У меня даж есть небольшая статейка по их созданию... Принцип один и тот же... Надо заюзать несколько функций - Copy(), Length, ну и главное функцию своего мозга :) Выложу небольшой пример, который обрабатывает одну команду. Можно будет наращивать с использованием if далее по аналогии. Думаю, тут ламеров конкретных нет, так что писать буду без комментов (не люблю я их писать почему-то).

program Interpreter;
var cmd : string;
var index : integer;
var button : command;
begin
ShowForm;
index := FormAddTextField('Команда:', '', 999, TF_ANY);
button := CreateCommand('Старт', CM_SCREEN, 1);
addCommand(button);
repeat
delay(100)
until GetClickedCommand = button;
cmd := FormGetText(index);
ClearForm;
If Copy(cmd, 0, 6) = 'print ' then
begin
index := FormAddString(Copy(cmd, 6, Length(cmd)));
delay(10000);
Halt;
end;
end.

Собс-но вот и сам пример. Всё вроде просто. Проверяем отрывок переменной cmd с 0 по 6-той символ и если он равен "print " тада выводим текст на экран. Тоже самое в бэйсике (не в тему, но покажу для сравнения).

Sub Main()
Dim command As String
command = InputBox("Команда:")
If Mid(command, 1, 6) = "print " Then
MsgBox Mid(command, 7, Len(command))
Else
MsgBox "Ошибка"
End If
End Sub

Mid() - эт Copy(), а Len() - эт Length(). В общем тоже самое тока на другом языке :)


Часовой пояс GMT +4, время: 21:49.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot