Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Задание начинающим - 2   Найти похожие ветки 

 
Igorek ©   (2004-05-18 14:02) [0]

"Написать форматтер кода Паскаля."

Просьба кидаться конструктивными мыслями.
В эту ветку буду наведываться редко.


 
pasha_golub ©   (2004-05-18 14:08) [1]

1. А зачем?
2. В чем форматировать? :хтмл, ртф или еще как
3. У каждого своя цветовая схема.
4. И еще раз см 1.


 
syte_ser78 ©   (2004-05-18 14:21) [2]

Что имеется ввиду под форматером?
Отступы для удобства чтения расставить, любой wRitelN написать как WriteLn,  или что ?


 
Mystic ©   (2004-05-18 14:26) [3]

LEX + YACC можно использовать?


 
Игорь Шевченко ©   (2004-05-18 14:27) [4]

DelForEx уже написан


 
clickmaker ©   (2004-05-18 14:28) [5]


> Igorek ©   (18.05.04 14:02)  

Предложи эту идею Dmitriy O. Он тебе форматтер с анимацией сделает :)


 
Dmitriy O. ©   (2004-05-18 14:29) [6]

Нафиг его воще форматировать ? Если для удобства себя то зачем форматировать после написания ? Форматировать нн только во время написания кода кому так удобнее. А вот зачем написать а потом форматировать когда уже и так все ясно это нонсенс. Все равно что после драки махать кулаками.


 
Mystic ©   (2004-05-18 14:45) [7]

Нафиг его воще форматировать ?

Иногда попадается нечно вроде:

if(outval<0)or((outval=0)and(lastsign<0))then begin outbuf[outptr]:=45;
outptr:=outptr+1;
end else if outsign>0 then begin outbuf[outptr]:=outsign;
outptr:=outptr+1;end;appval(abs(outval));
if outptr>linelength then flushbuffer;{:103};outsign:=43;outval:=outapp;
end else outval:=outval+outapp;outstate:=3;goto 20;end{:104};
0:if t<>3 then breakptr:=outptr;others:end{:102};
if t<>0 then for k:=1 to v do begin outbuf[outptr]:=outcontrib[k];
outptr:=outptr+1;end else begin outbuf[outptr]:=v;outptr:=outptr+1;end;
if outptr>linelength then flushbuffer;
if(t=0)and((v=59)or(v=125))then begin semiptr:=outptr;breakptr:=outptr;
end;if t>=2 then outstate:=1 else outstate:=0 end;{:101}{106:}
procedure sendsign(v:integer);
begin case outstate of 2,4:outapp:=outapp*v;3:begin outapp:=v;
outstate:=4;end;5:begin outval:=outval+outapp;outapp:=v;outstate:=4;end;
others:begin breakptr:=outptr;outapp:=v;outstate:=2;end end;
lastsign:=outapp;end;{:106}{107:}procedure sendval(v:integer);
label 666,10;begin case outstate of 1:begin{110:}
if(outptr=breakptr+3)or((outptr=breakptr+4)and(outbuf[breakptr]=32))then
if
((outbuf[outptr-3]=68)and(outbuf[outptr-2]=73)and(outbuf[outptr-1]=86)
)or((outbuf[outptr-3]=100)and(outbuf[outptr-2]=105)and(outbuf[outptr-1]=
118))or((outbuf[outptr-3]=77)and(outbuf[outptr-2]=79)and(outbuf[outptr-1
]=68))or((outbuf[outptr-3]=109)and(outbuf[outptr-2]=111)and(outbuf[
outptr-1]=100))then goto 666{:110};outsign:=32;outstate:=3;outval:=v;
breakptr:=outptr;lastsign:=+1;end;0:begin{109:}
if(outptr=breakptr+1)and((outbuf[breakptr]=42)or(outbuf[breakptr]=47))
then goto 666{:109};outsign:=0;outstate:=3;outval:=v;breakptr:=outptr;
lastsign:=+1;end;{108:}2:begin outsign:=43;outstate:=3;outval:=outapp*v;
end;3:begin outstate:=5;outapp:=v;begin writeln(stdout);
write(stdout,"! Two numbers occurred without a sign between them");
error;end;end;4:begin outstate:=5;outapp:=outapp*v;end;
5:begin outval:=outval+outapp;outapp:=v;begin writeln(stdout);
write(stdout,"! Two numbers occurred without a sign between them");
error;end;end;{:108}others:goto 666 end;goto 10;666:{111:}
if v>=0 then begin if outstate=1 then begin breakptr:=outptr;
begin outbuf[outptr]:=32;outptr:=outptr+1;end;end;appval(v);
if outptr>linelength then flushbuffer;outstate:=1;
end else begin begin outbuf[outptr]:=40;outptr:=outptr+1;end;
begin outbuf[outptr]:=45;outptr:=outptr+1;end;appval(-v);
begin outbuf[outptr]:=41;outptr:=outptr+1;end;


 
Игорь Шевченко ©   (2004-05-18 14:51) [8]

Mystic ©   (18.05.04 14:45)

Ты зря ключевые слова выделил


 
[lamer]Barmaglot ©   (2004-05-18 14:51) [9]

Не такой уж страшный код, тебе чего - программу которая за тебя будет enter расставлять? Так это дело 2 минут...

P.S. По моему мнению в отличии от С++, Delphi не нуждается в форматировании, все и так достаточно понятно...


 
syte_ser78 ©   (2004-05-18 14:54) [10]

А че, нормально, компактненько все :).
Только вот бы еще выравнивание по ширине. Или по центру.


 
Игорь Шевченко ©   (2004-05-18 14:55) [11]


> По моему мнению в отличии от С++, Delphi не нуждается в
> форматировании


Если нетрудно, поясни глубокую мысль насчет С++, чем он так отличается, что нуждается в форматировании ?


 
Mystic ©   (2004-05-18 14:59) [12]

> Ты зря ключевые слова выделил

Так получилось... Я не хотел...


 
хм ©   (2004-05-18 15:00) [13]

>[lamer]Barmaglot ©   (18.05.04 14:51) [9]
тогда ответь, какой уровень вложенности на 7-й, 10 и 13 строчках. И самое главное, там же GOTO :D


 
Mystic ©   (2004-05-18 15:15) [14]


> Не такой уж страшный код, тебе чего - программу которая
> за тебя будет enter расставлять? Так это дело 2 минут...


Там 51 Кб текста. Как я понял, ему лет двадцать. И, возможно, сгенерен автоматически.


 
DiamondShark ©   (2004-05-18 15:18) [15]

Конструктивная мысль:

Распарсить текст, пользуясь формальным описанием синтаксиса,
хранить как синтаксическое дерево,
вывести обратно в текст с любым форматированием по желанию.


 
syte_ser78 ©   (2004-05-18 15:23) [16]

Паспарсить - это записать его с интеревалом в один парсек между символами?


 
Игорь Шевченко ©   (2004-05-18 15:23) [17]

DiamondShark ©   (18.05.04 15:18)

AFAIK, DelForEx примерно так и работает.


 
Igorek ©   (2004-05-18 15:27) [18]


> pasha_golub ©   (18.05.04 14:08) [1]
> 1. А зачем?
> 2. В чем форматировать? :хтмл, ртф или еще как
> 3. У каждого своя цветовая схема.
> 4. И еще раз см 1.

1. В целом для учебы. По пунктам догадайся сам. :-)
2. Для начала оформить просто как класс(ы) на Паскале. Еще лучше вообще словами. Напр. "Берет файл, перемалывает, пишет куда нибуть." ;-)
3. Для начала без раскраски.
4. "И еще раз см 1." :-)


> syte_ser78 ©   (18.05.04 14:21) [2]
> Что имеется ввиду под форматером?
> Отступы для удобства чтения расставить, любой wRitelN написать
> как WriteLn,  или что ?

> Игорь Шевченко ©   (18.05.04 14:27) [4]
> DelForEx уже написан

Типа DelForEx.
Кем?

> Mystic ©   (18.05.04 14:26) [3]
> LEX + YACC можно использовать?

Как хотите. Можете даже DelForEx. Дело вкуса.

> clickmaker ©   (18.05.04 14:28) [5]
> Предложи эту идею Dmitriy O. Он тебе форматтер с анимацией
> сделает :)

Хорошая идея. Дмитрий, берешься?

> Dmitriy O. ©   (18.05.04 14:29) [6]
> Нафиг его воще форматировать ? Если для удобства себя то
> зачем форматировать после написания ? Форматировать нн только
> во время написания кода кому так удобнее. А вот зачем написать
> а потом форматировать когда уже и так все ясно это нонсенс.
> Все равно что после драки махать кулаками.

(Хорошо бы без ошибок и внятно с запятыми). Также глянь [7] и ответь, что ты сделаешь, когда тебе скажут разобраться в этом коде?

> Mystic ©   (18.05.04 14:59) [12]
> Так получилось... Я не хотел...

Все равно неплохо.

2 хм
Прикольный ник. :-)


 
Игорь Шевченко ©   (2004-05-18 15:39) [19]

Igorek ©   (18.05.04 15:27)


> Типа DelForEx.
> Кем?


Egbert_van_Nes { author }


 
Igorek ©   (2004-05-18 15:41) [20]


> DiamondShark ©   (18.05.04 15:18) [15]
> Конструктивная мысль:
>
> Распарсить текст, пользуясь формальным описанием синтаксиса,
> хранить как синтаксическое дерево,
> вывести обратно в текст с любым форматированием по желанию.

Плюсы:
- разбор пройдет до конца "в глубину"
- легкое портирование на другой язык при условии, что сама грамматика будет перед этим парситься из файла (есть у меня одна старая идея, но не скажу :-) );
Минусы:
- что делать с ошибками в коде
Замечания:
Вообще-то долго наверно будет работать если все парсить до конца. А это может быть не всегда нужно.


 
Igorek ©   (2004-05-18 15:44) [21]


> Игорь Шевченко ©   (18.05.04 15:39) [19]

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


 
Mystic ©   (2004-05-18 15:46) [22]

> Для начала оформить просто как класс(ы) на Паскале

Вообще-то, это больше задача по разбору и компиляции, тут напрашиваются медитация над книгой Дракона.


 
Sergey_Masloff   (2004-05-18 15:47) [23]

Не знаю с исходниками ли DelForEx но ведь есть ptop который точно с исходниками кроссплатформенный и вообще достаточно хорош. Так что нефиг за Igorek ©  писать курсовые а кому интересно для обучения см. исходники - самому для этого форматтер писать не нужно просто разобраться как работает. И свое писать (если писать) на базе чего-то а не изобретая телегу с 5 колесом.

p.s ptop (и ptopu) - модули из стандартной поставки FreePascal


 
Dmitriy O. ©   (2004-05-18 15:50) [24]


> Также глянь [7] и ответь, что ты сделаешь, когда тебе скажут
> разобраться в этом коде?
Ну если скажут то ! Воспользуюсь каким нить форматером кода
готовым.


 
Игорь Шевченко ©   (2004-05-18 15:51) [25]


> Не знаю с исходниками ли DelForEx


С исходниками. Freeware


 
Sergey_Masloff   (2004-05-18 16:02) [26]

Игорь Шевченко ©   (18.05.04 15:51) [25]
Ну что Free я знаю. Он же кажется на Delphi 7 Companion CD есть но там без исходников. А так вещь очень удобная.


 
Igorek ©   (2004-05-18 16:56) [27]


> Sergey_Masloff   (18.05.04 15:47) [23]
Так что нефиг за Igorek ©  писать курсовые

Правильно, нефиг. Тем более, что я курсовую не пишу (пока).

Ну так что, никого из начинающих не заинтересовала хотя бы сама идея?


> Игорь Шевченко ©   (18.05.04 15:51) [25]
>
> > Не знаю с исходниками ли DelForEx
>
> С исходниками.

Мама! Да там же 170 кило кода. TPascalParser использует указатели, есть непропорционально большие методы. Начинающие, давайте напишем короче и красивее.


 
Игорь Шевченко ©   (2004-05-18 16:59) [28]


> Да там же 170 кило кода. TPascalParser использует указатели,
> есть непропорционально большие методы. Начинающие, давайте
> напишем короче и красивее.


По "кило кода" вполне нормально для такой программы. Я сильно сомневаюсь, чтобы начинающие могли написать меньше по размеру и безглючно. Впрочем, можешь показать пример.


 
nikkie ©   (2004-05-18 18:31) [29]

>Начинающие, давайте напишем короче и красивее.
себя-то к кому относишь? к начинающим или продолжающим?
ты этот код проверять будешь (типа гуру?) или по нему учиться (я уж не знаю тогда, кто ты, если у начинающих будешь учиться)?


 
Igorek ©   (2004-05-19 11:17) [30]


> nikkie ©   (18.05.04 18:31) [29]
> >Начинающие, давайте напишем короче и красивее.
> себя-то к кому относишь?

К среднячкам. Учиться будем вместе.


 
Некрофил-затейник ©   (2004-05-19 11:25) [31]

Там 51 Кб текста. Как я понял, ему лет двадцать. И, возможно, сгенерен автоматически.

MIT????


 
Mystic ©   (2004-05-19 12:38) [32]

> MIT????

web2pas (конвертер из web в какой-то древний pascal). Сам web это TeX-оподобный язык, который при помощи этой программы перекодируется во многие алгоритмоческие языки программирования...

Например, вот часть исходников TeX:

tex.web
=======

% This program is copyright (C) 1982 by D. E. Knuth; all rights are reserved.
% Copying of this file is authorized only if (1) you are D. E. Knuth, or if
% (2) you make absolutely no changes to your copy. (The WEB system provides
% for alterations via an auxiliary file; the master file should stay intact.)
% See Appendix H of the WEB manual for hints on how to install this program.
% And see Appendix A of the TRIP manual for details about how to validate it.

% TeX is a trademark of the American Mathematical Society.
% METAFONT is a trademark of Addison-Wesley Publishing Company.

% Version 0 was released in September 1982 after it passed a variety of tests.
% Version 1 was released in November 1983 after thorough testing.
% Version 1.1 fixed ``disappearing font identifiers"" et alia (July 1984).
% .......... skiped ..............
% Version 3.141 more of same; reconstituted ligatures better (March 1992).
% Version 3.1415 preserved nonexplicit kerns, tidied up (February 1993).
% Version 3.14159 allowed fontmemsize to change; bulletproofing (March 1995).
% Minor corrections to the documentation (only) were made in July 2001.

% A reward of $327.68 will be paid to the first finder of any remaining bug.

% Although considerable effort has been expended to make the TeX program
% correct and reliable, no warranty is implied; the author disclaims any
% obligation or liability for damages, including but not limited to
% special, indirect, or consequential damages arising out of or in
% connection with the use or performance of this software. This work has
% been a ``labor of love"" and the author hopes that users enjoy it.

% Here is TeX material that gets inserted after \input webmac
\def\hang{\hangindent 3em\noindent\ignorespaces}
\def\hangg#1 {\hang\hbox{#1 }}
\def\textindent#1{\hangindent2.5em\noindent\hbox to2.5em{\hss#1 }\ignorespaces}
\font\ninerm=cmr9
\let\mc=\ninerm % medium caps for names like SAIL
\def\PASCAL{Pascal}
\def\ph{\hbox{Pascal-H}}
\def\pct!{{\char`\%}} % percent sign in ordinary text
\font\logo=logo10 % font used for the METAFONT logo
\def\MF{{\logo META}\-{\logo FONT}}
\def\<#1>{$\langle#1\rangle$}
\def\section{\mathhexbox278}

% ............ skiped .............



Страницы: 1 вся ветка

Текущий архив: 2004.06.06;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.03 c
6-1082054073
MasterDenis
2004-04-15 22:34
2004.06.06
Как проще клиенту отловить на какой машине сервер


6-1082261812
LLiriK
2004-04-18 08:16
2004.06.06
Отправка SMS


1-1085325898
vajo
2004-05-23 19:24
2004.06.06
TreeView


1-1085074474
K@rt
2004-05-20 21:34
2004.06.06
Information for


6-1082389209
SniZ
2004-04-19 19:40
2004.06.06
Изменить IP