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

Вниз

Как найти в 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); //&#196;&#235;&#232;&#237;&#237;&#224; &#241;&#242;&#240;&#238;&#234;&#232;

   Result:=IsLetter(s[p]); //&#207;&#229;&#240;&#226;&#251;&#233; &#241;&#232;&#236;&#226;&#238;&#235; &#228;&#238;&#235;&#230;&#229;&#237; &#225;&#251;&#242;&#252; &#225;&#243;&#234;&#226;&#238;&#233;
   if not result then exit;
   p1:=p; //&#205;&#224;&#247;&#224;&#235;&#238; &#232;&#228;&#229;&#237;&#242;&#232;&#244;&#232;&#234;&#224;&#242;&#238;&#240;&# 224;
   p2:=P1;
   inc(p); //&#209;&#228;&#226;&#232;&#227;&#224;&#254; &#243;&#234;&#224;&#231;&#224;&#242;&#229;&#235;&#252;
   while IsLetter(s[p]) or IsDigit(s[p]) do
     begin
     if p <= ln then
       begin
       p2:=p;
       inc(p) //&#211;&#226;&#229;&#235;&#232;&#247;&#232;&#226;&#224;&#254;, &#239;&#238;&#234;&#224; &#241;&#242;&#240;&#238;&#234;&#224; &#237;&#229; &#234;&#238;&#237;&#247;&#232;&#235;&#224;&#241;&#252;
       end
     else
       break; //&#200;&#237;&#224;&#247;&#229; &#226;&#251;&#245;&#238;&#230;&#243;
     end;

    ln1:=P2-P1+1; //&#209;&#234;&#238;&#235;&#252;&#234;&#238; &#237;&#243;&#230;&#237;&#238; &#241;&#234;&#238;&#239;&#232;&#240;&#238;&#226;&#224;&#242;&#252;
    IdentStr:=Copy(s, p1, ln1);
 end;

begin
Result:=false;
if s="" then exit;
p:=1; //&#205;&#224;&#247;&#224;&#235;&#252;&#237;&#238;&#229; &#239;&#238;&#235;&#238;&#230;&#229;&#237;&#232;&#229; &#225;&#229;&#227;&#243;&#237;&#234;&#224;
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.054 c
15-1143653618
Kolan
2006-03-29 21:33
2006.04.23
Совместимось bpl пакетов Delphi 2006 с Delphi 7.


2-1144649364
Yojik
2006-04-10 10:09
2006.04.23
Не видны данные через Fields и FiledByName в DM


15-1144095238
systemis
2006-04-04 00:13
2006.04.23
Новейший Delphi проэкт


15-1144046910
cyc
2006-04-03 10:48
2006.04.23
Законно ли оно?


2-1144411384
It06
2006-04-07 16:03
2006.04.23
TButton