|
23.11.2008, 00:17
|
#1
|
AnyKey`щик
Регистрация: 21.11.2008
Сообщений: 6
Написано одно полезное сообщение
|
Интерпретатор в телефоне
Привет, программеры! У меня тут зародилысь идейка - создать некое подобие какого-нить языка (ну конечно же это Паскакаль ) Главное то, чтобы он работал в телефоне. То есть берём свою любимую трубу, пишем прогу, а он(телефон) эту прогу интерпритирует(по-моему это правильное слово). Типа бейсика что-то сделать... Кто как на этот счёт думает?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
23.11.2008, 01:49
|
#2
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Интерпретатор в телефоне
Во-первых, нечто подобное уже есть, правда для сименсов + есть интерпретатор(правда, не совсем паскаль, написанный одним из местных кодеров) http://forum.boolean.name/showthread.php?t=7262 Во-вторых, интерпретатор - это тормоза, мороки много, а толку мало. В-третьих, как-то обломно текст программы на клавиатуре тела набирать.
|
(Offline)
|
|
23.11.2008, 02:03
|
#3
|
AnyKey`щик
Регистрация: 21.11.2008
Сообщений: 6
Написано одно полезное сообщение
|
Ответ: Интерпретатор в телефоне
В этом - то всё и дело!!! Сделать не что-то подобное, а своё, родное Потом помнишь Delphi? так вот, там есть такая фишка - вводишь типизированную переменную(может даже имя объекта), жмёшь точку, вылазит окошко со свойствами этого объекта. Так вот, так же можно поступить и с зарезервированными словами. Ввёл первую букву, он тебе дал список зарезервированных слов на эту букву, дальше полистал, выбрал слово, нажал на OK и оно уже введено. Тут можно будет её дочиканить до того, что нужно будет вводить полностью только новые названия типов, переменных, констант и т.д. Как на это смотришь?
А вот насчёт тормозов интерпритатора - будем усовершенствовать так, пока не будет работать как на компе на эмуляторе.(по-моему так можно )
|
(Offline)
|
|
23.11.2008, 04:57
|
#4
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Интерпретатор в телефоне
там есть такая фишка - вводишь типизированную переменную(может даже имя объекта), жмёшь точку, вылазит окошко со свойствами этого объекта. Так вот, так же можно поступить и с зарезервированными словами. Ввёл первую букву, он тебе дал список зарезервированных слов на эту букву, дальше полистал, выбрал слово, нажал на OK и оно уже введено.
|
И как ты это будешь делать? Будешь ввод с клавиатуры в канвасе реализовывать? Верх извращенства...
|
(Offline)
|
|
23.11.2008, 08:11
|
#5
|
AnyKey`щик
Регистрация: 21.11.2008
Сообщений: 6
Написано одно полезное сообщение
|
Ответ: Интерпретатор в телефоне
Сообщение от Phantom_wc
И как ты это будешь делать? Будешь ввод с клавиатуры в канвасе реализовывать? Верх извращенства...
|
Помнится встретилась мне тут на форуме одна замечательная прога. Зовут её BrainFuck(Название архива BF(ссылку не укажу(непомню, где она))). Так вот, там была продемонстрированна реализация такого замечательного метода(альтернативный ввод - вроде бы её название(извиняюсь за неграмотность...)). Оттуда можно его вытянуть.
Кстати, посидел, подумал, а если представить, что программа будет занимать очень много текста, тогда выбор нужного компонента/переменной/объекта будет ну просто оччень большим...
|
(Offline)
|
|
23.11.2008, 13:53
|
#6
|
Элита
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений (для 1,833 пользователей)
|
Ответ: Интерпретатор в телефоне
там была продемонстрированна реализация такого замечательного метода(альтернативный ввод - вроде бы её название(извиняюсь за неграмотность...)). Оттуда можно его вытянуть.
|
И распрощайся с Т9 + появятся тормоза на разных мобилах + раскладка клавиатуры на различных мобилах отличается.
|
(Offline)
|
|
28.03.2009, 17:30
|
#7
|
AnyKey`щик
Регистрация: 15.03.2009
Сообщений: 7
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Интерпретатор в телефоне
Сообщение от DixaDel
Привет, программеры! У меня тут зародилысь идейка - создать некое подобие какого-нить языка (ну конечно же это Паскакаль ) Главное то, чтобы он работал в телефоне. То есть берём свою любимую трубу, пишем прогу, а он(телефон) эту прогу интерпритирует(по-моему это правильное слово). Типа бейсика что-то сделать... Кто как на этот счёт думает?
|
как сделать пока не знаю но вещь полезная ведь можно программировать в в любом месте в любое время!!
|
(Offline)
|
|
03.04.2009, 17:35
|
#8
|
AnyKey`щик
Регистрация: 04.03.2009
Сообщений: 4
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Интерпретатор в телефоне
А вы знаете про lm2j+jtome+perefekator=Java..
Еще есть для телефона, ява компилятор, могу ссылки дать
|
(Offline)
|
|
03.04.2009, 19:47
|
#9
|
Нуждающийся
Регистрация: 07.03.2009
Сообщений: 98
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Интерпретатор в телефоне
ага
!!!!!!!!!скинь
|
(Offline)
|
|
26.04.2009, 14:37
|
#10
|
AnyKey`щик
Регистрация: 09.01.2009
Сообщений: 8
Написано одно полезное сообщение
|
Ответ: Интерпретатор в телефоне
кто нибудь пробовал делать интерпретатор паскаля? я попробовал и вот что пока получилось
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.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.05.2009, 16:29
|
#11
|
Нуждающийся
Регистрация: 02.05.2009
Сообщений: 68
Написано 6 полезных сообщений (для 6 пользователей)
|
Ответ: Интерпретатор в телефоне
Прикольно).., этому коду нужно подключить кучу библиотек, сделать возможность сохранение и загрузку pac-файлов с фс телефона, написать интерфейс и ваять )
|
(Offline)
|
|
05.08.2009, 20:08
|
#12
|
Нуждающийся
Регистрация: 30.07.2009
Сообщений: 61
Написано одно полезное сообщение
|
Ответ: Интерпретатор в телефоне
Ну... Не знаю, я делал на 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(). В общем тоже самое тока на другом языке
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:16.
|