![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
кол-во слов в тексте
Петька © (2008-02-01 01:15:00)народ бьюсь тут с задачей:
надо подсчитать кол-во begin и end в исходнике любого pas файла, сначала пришла мысль подсчитать begin, end столько же))) но все таки надо сделать по-человечески:)
у кого какие мысли по этому поводу?
ketmar (2008-02-01 23:37:00) [1]блин. а для вывода на экран буквы ты завсегда свой рендерер ttf пишешь? O_o
Петька (2008-02-01 22:56:00) [2]спасибо
Anatoly Podgoretsky (2008-02-01 11:16:00) [3]Граф очень простой, и ни о каких вхождениях в "состояняие строка" в задание и речи нет, более того это будет ошибкой, как не соответствие условиям задачи.
@!!ex (2008-02-01 10:39:00) [4]http://ifolder.ru/5183189
количество Begin ест считается по переходу парсера в состояния Нашли begin и Нашли End соответственно.
для отработки комментаря // нужно сделать переход из любого состояния в состояние комментарий по появлению двух символов // и возврат по переводу строки.
Для обработки строки, нужно сделать переход в состояние строка по символу ' и выход из этого состояние по этому же символу.
Ну и с комментарием примерно тоже самое.
на самом деле приведенный парсер нельзя использховать в компиляторах, потому что там рекурсия нужна. да и видно, что задача простейшая, а граф получился жуткий..
sniknik (2008-02-01 10:35:00) [5]но вообще, вопрос не о подсчете логических блоков языка - begin ... end, а в подсчете слов, которые даже в комментариях считаются... по уровню лаба только только начавших учить язык и узнавших оператор Pos/PosEx, у нас была подобная в первом семестре первого курса, еще на паскале (там PosEx не было, или не помню, но обошлись без него. т.е. еще и сложнее было... и инета не было...).
sniknik (2008-02-01 10:29:00) [6]> извините за плохой англицкий, но попробуйте посчитать
а очень даже хорошо сочетается... %)
begin
try
BeginThread(@Proc);
except
ShowMessage("We can's begin some thread & end this procedure")
end;
end;
@!!ex (2008-02-01 10:27:00) [7]сделал парсер, случай [4] и [7] отрабатываются без проблем, а вот в [5] слова внутри строки считает, в принципе всунуть в граф отдельный блок обрабатывающий вхождение - выход из строки и комментярия- не проблема, но мне немножко влом.
Slym (2008-02-01 09:37:00) [8]или
BEgiN if (1/3*3)=1 then bEgIn OhYa('end'); eNd eLse BeGIn SoBad('begin'); enD;eND;
Johnmen (2008-02-01 09:33:00) [9]
> спасибо, выкладывай!
Да-дад! Накладывайте здесь и побольше. Видите же, сколько желающих. А на халяву и наложенное сладко :)
Slym (2008-02-01 09:32:00) [10]извините за плохой англицкий, но попробуйте посчитать
begin
try
BeginThread(@Proc);
except
ShowMessage("We can's begin some thread & end this procedure")
end;
end;
sniknik (2008-02-01 08:28:00) [11]как это не нужно? ему же лабу/курсовой/... сдавать...
> может быть сильно отлично от количества begin, например:
S endMessage(...)
Loginov Dmitry (2008-02-01 07:59:00) [12]Любой приличный текстовый редактор умеет подсчет вести (например, Notepad++). Не нужно ничего выдумывать.
Петька (2008-02-01 02:40:00) [13]спасибо, выкладывай!
@!!ex (2008-02-01 01:27:00) [14]уважаемый, вы ошибаетесь, количество end может быть сильно отлично от количества begin, например:
begin
case i of
end;
end.
Если же стоит простая задача подсчета begin, end, лучше всего делать это парсером, простым конечным автоматом, который будет перебирвать весь текст посимвольно и ловить вхождения в него begin, end.
могу пример такого парсера выложить, но через часов 10... как посплю.