Главная
Регистрация
Вход
Авторизироваться
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: ADMIN, Nextik  
Форум » MidletPascal » Делимся! » интерпретатор языка программирования паскаль
интерпретатор языка программирования паскаль
12121Дата: Четверг, 16.04.2009, 16:06 | Сообщение # 16
Программист
Группа: Проверенные
Сообщений: 357
Награды: 4
Репутация: « 290 »
Статус: Offline
massivizstroki('program;begin;write("helloworl");end'); сюда же надо добавить обьявление переменных?
 
programmerДата: Четверг, 16.04.2009, 16:07 | Сообщение # 17
Умный
Группа: Проверенные
Сообщений: 599
Награды: 3
Репутация: « 111 »
Статус: Offline
а тоесть програм проходит проверку и отдуда пытается отрезать
7 символов которых нет... буду думать biggrin
 
programmerДата: Четверг, 16.04.2009, 16:08 | Сообщение # 18
Умный
Группа: Проверенные
Сообщений: 599
Награды: 3
Репутация: « 111 »
Статус: Offline
Quote (12121)
massivizstroki('program;begin;write("helloworl");end'); сюда же надо добавить обьявление переменных?

да
я теперь понял к каждому элементу массива нужно предварительно добавить
---------------------------------
тогда ьудет что скопировать и несовпадет и пойдет дальше
 
12121Дата: Четверг, 16.04.2009, 16:10 | Сообщение # 19
Программист
Группа: Проверенные
Сообщений: 357
Награды: 4
Репутация: « 290 »
Статус: Offline
все довести до ума будет очень сложно. может сначала сделал бы что попроще?
 
programmerДата: Четверг, 16.04.2009, 16:12 | Сообщение # 20
Умный
Группа: Проверенные
Сообщений: 599
Награды: 3
Репутация: « 111 »
Статус: Offline
что?
 
12121Дата: Четверг, 16.04.2009, 16:34 | Сообщение # 21
Программист
Группа: Проверенные
Сообщений: 357
Награды: 4
Репутация: « 290 »
Статус: Offline
хоть игрушку какую.
а тут надо придумать как для каждой процедуры сделать свои переменные. можно выделить 1 массив под эти цели но если 1 процедура вызовет 2? тогда надо 2 массива а если 2 вызовет 3?
плохо что нет стека
 
programmerДата: Четверг, 16.04.2009, 16:38 | Сообщение # 22
Умный
Группа: Проверенные
Сообщений: 599
Награды: 3
Репутация: « 111 »
Статус: Offline
да не лучше буду делать интерпретатор но неспеша,продумывая все
 
12121Дата: Четверг, 16.04.2009, 16:38 | Сообщение # 23
Программист
Группа: Проверенные
Сообщений: 357
Награды: 4
Репутация: « 290 »
Статус: Offline
Может лучше сделать свой бейсик. Он проще
 
programmerДата: Четверг, 16.04.2009, 16:43 | Сообщение # 24
Умный
Группа: Проверенные
Сообщений: 599
Награды: 3
Репутация: « 111 »
Статус: Offline
я его незнаю
да и синтаксис поменять - несложно


Сообщение отредактировал programmer - Четверг, 16.04.2009, 18:08
 
121212Дата: Воскресенье, 19.04.2009, 14:59 | Сообщение # 25
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация: « 14 »
Статус: Offline
да долго это всё делать скачай МобилеПаскаль и не парся!
 
programmerДата: Воскресенье, 19.04.2009, 16:52 | Сообщение # 26
Умный
Группа: Проверенные
Сообщений: 599
Награды: 3
Репутация: « 111 »
Статус: Offline
уменя во первых несименс - мне непойдет он
и тем более если тынезнаешь как это делать это незначит что я незнаю cool
 
programmerДата: Понедельник, 20.04.2009, 14:34 | Сообщение # 27
Умный
Группа: Проверенные
Сообщений: 599
Награды: 3
Репутация: « 111 »
Статус: Offline
опять что-то ненравиться sad
program pascal;
{-----------------------------------------------------------------}
var
tm:array[1..40] of string; // максимальное к-во пунктов
vars:array[1..40] of string;
lines:integer;
vas:integer;
{-----------------------------------------------------------------}

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;

procedure vabr(stroka:string);
var
i:integer; // убрал лишние переменные
begin
vas:=1;// - будет количество получившихся строк
vars[1]:=''; // что бы с прошлого вызова ничего не осталось
for i:=1 to length(stroka) do begin //разбивка на пункты
if copy(stroka,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end;
if copy(stroka,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(stroka,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 hel='begin' then break; // после обработки 'program' выход из цикла и ничего больше не проверяется !!
if hel='end' then break; // короткие команы нужно проверить раньше длинных: если hel='end' то copy(hel,0,5) приведет к зависанию !!
//if Copy(hel,0,7)='program' then break;
//soob('|'+copy(hel,0,5)+'|'); // это я так искал ошибку
if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end;
end;
end;
{------------------------------------------------}
begin
massivizstroki('program;begin;write("helloworld");end');
main;
end.

 
121212Дата: Понедельник, 20.04.2009, 14:54 | Сообщение # 28
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация: « 14 »
Статус: Offline
не процедура а функция наверно!
 
121212Дата: Понедельник, 20.04.2009, 15:29 | Сообщение # 29
Программист
Группа: Проверенные
Сообщений: 268
Награды: 7
Репутация: « 14 »
Статус: Offline
program pascal;
{-----------------------------------------------------------------}
var
tm:array[1..40] of string; // максимальное к-во пунктов
vars:array[1..40] of string;
lines:integer;
vas:integer;
{-----------------------------------------------------------------}

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(stroka:string);
var
i:integer; // убрал лишние переменные
begin
vas:=1;// - будет количество получившихся строк
vars[1]:=''; // что бы с прошлого вызова ничего не осталось
for i:=1 to length(stroka) do begin //разбивка на пункты
if copy(stroka,i-1,i)=',' then begin vas:=lines+1;vars[vas]:='';i:=i+1; end;
if copy(stroka,i-1,i)<>' ' then vars[vas]:=vars[vas]+copy(stroka,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 hel='begin' then break; // после обработки 'program' выход из цикла и ничего больше не проверяется !!
//if hel='end' then break; // короткие команы нужно проверить раньше длинных: если hel='end' то copy(hel,0,5) приведет к зависанию !!
//if Copy(hel,0,7)='program' then break;
soob('|'+copy(hel,0,5)+'|'); // это я так искал ошибку
if copy(hel,0,5)='write' then begin lel:=copy(hel,7,hellen-2); write(lel,5000); end;
end;
end;
{------------------------------------------------}
begin
massivizstroki('program;begin;write("helloworld");end');
main;
end.

 
programmerДата: Понедельник, 20.04.2009, 17:41 | Сообщение # 30
Умный
Группа: Проверенные
Сообщений: 599
Награды: 3
Репутация: « 111 »
Статус: Offline
cпасибо!
 
Форум » MidletPascal » Делимся! » интерпретатор языка программирования паскаль
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск: