Форум: "Основная";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизКак найти в end, соответствующий begin-у Найти похожие ветки
← →
Леван (2006-03-16 11:08) [0]Привет мастерам
Как в тексте программы найти end по begin-у и наоборот ?
← →
wal © (2006-03-16 11:26) [1]end в программе может закрывать не только begin, но и package, record, try, case, asm, object, class, initialization, interface, вроде все.
Вот и ищи все эти операторные скобки.
← →
Леван (2006-03-16 12:00) [2]и как искать ? :)
← →
Леван (2006-03-16 12:01) [3]в смисле, глазами или какой-нибудь клавишей ?
← →
Anatoly Podgoretsky © (2006-03-16 12:08) [4]Рекурсивно
← →
Black Krok © (2006-03-16 12:38) [5]Есть всякие примочки типа GExperts. Ставятся на среду, позволяют кучу всяких сервисов, 3/4 нафиг не нужны :)
Но этот сервис реализован.
← →
Pavia © (2006-03-16 16:09) [6]Учись правельно оформлять код.
← →
tesseract © (2006-03-16 17:00) [7]
> Учись правельно оформлять код.
угу я так делаю
if <> then
begin
end; // if <> then
← →
Belorus © (2006-03-16 18:34) [8]www.gaplayer.narod.ru
Там лежит програмулька(24КБ) по сортировке таких вещей.
Он в частности пробелы ставит как надо. Можете попробовать. Только не пинайте написал за 2 часа.
← →
Gydvin © (2006-03-16 19:54) [9]www.gaplayer.narod.ru
Во ее (программу) колбасит :)))
← →
Sergey Masloff (2006-03-16 21:54) [10]tesseract © (16.03.06 17:00) [7]
>угу я так делаю
>if <> then
>begin
>end; // if <> then
То есть после энда коммент энд чего это? НЕНАВИЖУ!!!! (Ничего личного)
;-)))
← →
Германн © (2006-03-17 01:42) [11]
> Sergey Masloff (16.03.06 21:54) [10]
>
> tesseract © (16.03.06 17:00) [7]
>
> >угу я так делаю
> >if <> then
> >begin
>
> >end; // if <> then
> То есть после энда коммент энд чего это? НЕНАВИЖУ!!!! (Ничего
> личного)
> ;-)))
! - четыре раза повторен, а ")" только три. Чтобы это значило?
← →
аноним (2006-03-17 04:53) [12]>end; // if <> then
бррр... не люблю такой изврат. хотя в особо крупных и запутанных блоках помогает. а лучше юзать BDS2006 :) ну или Castalia...
← →
TUser © (2006-03-17 08:45) [13]far (файлманагер такой) + colorer (плагин к нему)
Програмно - читать текст, обращая внимание на [1], а также на комментарии, апостроф. Рекурсию использовать не надо - надо сделать автомат с конечным числом состояний и читать.
← →
tesseract © (2006-03-17 09:32) [14]
> Sergey Masloff (16.03.06 21:54) [10]
Тогда встречный вопрос .
А какими экспертами кто пользуется ?
Есть среди них с нормальным форматтером?
← →
GrayFace © (2006-03-17 10:50) [15]Я пока использовал только форматтер DelForEx - прилично форматирует.
← →
clickmaker © (2006-03-17 12:52) [16]
> GrayFace © (17.03.06 10:50) [15]
> Я пока использовал только форматтер DelForEx - прилично
> форматирует
ППКС
← →
tesseract © (2006-03-17 15:35) [17]
> Я пока использовал только форматтер DelForEx - прилично
> форматирует.
да в новый gexperts он оказывается тоже вошёл.
← →
GrayFace © (2006-03-21 10:28) [18]> ППКС
Что за зверь?
← →
TStas © (2006-03-21 10:48) [19]Папрсить, батенька. Сначала разобрать код на отдельныеислова. Потом составить те, у которых тожен быть end . И список лескем читать, свтретьлся end увеличил счетчик, встретился его закрывающей, try например, уменьших счетчик. Стал счетчик =0 - нашел что искал. Я когда-то так изскал тэги HTML у них же неограниченная вложенность. Только вот с if облом выйти, наверно, может. Хотя нет. ЕСли есть end, знать есть и бегин. РАзобрать на просто слова не просто, а очень просто
function IsIdentifier(out IdentStr: String): Boolean;
var
ln: Integer;
p1, p2, ln1: Integer;
begin
SkipSpace;
ln:=Length(s); //Äëèííà ñòðîêè
Result:=IsLetter(s[p]); //Ïåðâûé ñèìâîë äîëæåí áûòü áóêâîé
if not result then exit;
p1:=p; //Íà÷àëî èäåíòèôèêàòîð&# 224;
p2:=P1;
inc(p); //Ñäâèãàþ óêàçàòåëü
while IsLetter(s[p]) or IsDigit(s[p]) do
begin
if p <= ln then
begin
p2:=p;
inc(p) //Óâåëè÷èâàþ, ïîêà ñòðîêà íå êîí÷èëàñü
end
else
break; //Èíà÷å âûõîæó
end;
ln1:=P2-P1+1; //Ñêîëüêî íóæíî ñêîïèðîâàòü
IdentStr:=Copy(s, p1, ln1);
end;
begin
Result:=false;
if s="" then exit;
p:=1; //Íà÷àëüíîå ïîëîæåíèå áåãóíêà
Result:=IsIdentifier(s1);
if not Result then exit;
s1:=AnsiLowerCase(s1);
Result:=(s1="procedure") or (s1="function");
if not Result then exit;
Result:=IsIdentifier(ProcName);
end;
Исключений здесь возбуждать явно не надо. Статья была, не помню адрес, там общая идея как всякие парсеры писать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c