Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

Задание начинающим - 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.037 c
4-1083725758
Matveyev
2004-05-05 06:55
2004.06.06
Пункт меню с иконкой


14-1085119972
Alex_x
2004-05-21 10:12
2004.06.06
тестирование своих программ


14-1084798394
Kerk
2004-05-17 16:53
2004.06.06
Запуздырить иконку в трей


6-1082099598
-=Rezya=-
2004-04-16 11:13
2004.06.06
Низкоуровневый сервер


14-1084601263
Думкин
2004-05-15 10:07
2004.06.06
С днем рождения! 15 мая.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский