Страница 1 из 2
Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 16 мар 2008, 12:46
paul11j
Есть 2 задачи:
1)Сначала код программы, который вводиться с клавиатуры(программа может быть какой угодно)записиваеться в файл. После прочитать текст программы с файла, потом вывести прогу на экран и вывести в алфавитном порядке все ее идентификаторы(при этом цифры выводиться не должны). Текст программы вводишь сам.
2)Составить программу которая вводит строку символов, формируя с ее элементов однонаправленный список. Удалить последние три символа строки.
Задачи на Паскале
Всем, кто ответит огромное спасибо.
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 17 мар 2008, 02:00
Dim...ON
paul11j , стучись в аську 198-012-696
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 17 мар 2008, 11:29
Хыиуду
1. Находишь в тексте программы слово var и считываешь все, пока не встретится слово begin, function, procedure, label, const, type, interface, implementation. Потом разбиваешь полученную строку на элементы (см. раздел Алгоритмы), потом упорядочиваешь список этих слов по алфавиту (см. там же).
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 17 мар 2008, 22:20
Serge_Bliznykov
Хыиуду,
если бы всё так просто... ;-((
var ....
const ...
var ...
а есть ещё локальные переменные...
кроме того, если мне не изменяет память, то идентификтор - это любое имя (не только именя переменных, но и параметеры процедур/функции, да и сами имена функций/процедур...
задачка сильно попахивает необходимостью разработки лексического анализатора... ;-((
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 18 мар 2008, 11:14
Хыиуду
Тогда если найдется еще один var - считывать дальше. В чем проблема-то?
Лексический анализатор я писал где-то на 4 курсе, он именно так и работал.
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 18 мар 2008, 11:15
Хыиуду
Упс, неправильно прочитал сообщение: не все переменные, а все идентификаторы. Тогда действительно надо писать лексический анализатор. Думаю, лучше всего сделать это с помощью конечного автомата.
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 18 мар 2008, 11:21
Serge_Bliznykov
" писал(а):, лучше всего сделать это с помощью конечного автомата.
к слову. а готовый есть? Было бы чисто интересно для себя посмотреть...
вспомнить молодость, студенческие года... ;-)))) (впрочем, как Вы можете догадаться, другой, кроме любопытства и ностальгии, нужнды лично у меня, нет.. ;-)
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 18 мар 2008, 15:21
MOTOCoder
Как я понимаю-все кроме значений(числовых,символьных и т.д), операторов и комментариев-есть идентификаторы(че-то я подзабыл определение идентификатора).
Тогда ничего сложного - берем строку, отсенваем все знаки(точки минусы и т.д.), разбиваем её на слова, потом убираем из массива слов все числовые, строковые, символьные и т.д значения.
Потом проверяем, не является ли данное слово оператором(можно занести все основные операторы в файл и читать оттуда).
Наконец, берем то, что осталось и проверяем, есть ли уже в массиве идентификаторов такой идентификатор, если нет-записываем.
Так обрабатываем все строки.
Дальше стандартный алгоритм сортировки.
Или я в чем-то неправ?
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 18 мар 2008, 18:03
MOTOCoder
Вот первые наработки.
По моему работает:
[syntax='Delphi']
program Ident;
const
ServSymbSet=[',',#39,'[',']','=',':',';','<','>','*','(',')','-','+',' '];
Digits=['0'..'9','.'];
var
FSrc:text;
FKeyList:text;
CurLine:string;
i:integer;
Blocks:array[1..128]of string;
ResWords:array[1..100]of string;
ResWdCount:integer;
cnt:integer;
St:string;
Function UpperCase(S:string):string;
var
SS:string;
i:integer;
begin
SS:='';
for i:=1 to Length(S) do
SS:=SS+UpCase(S);
UpperCase:=SS;
end;
Procedure LoadRes;
begin
Assign(FKeyList,'ResWords.txt');
Reset(FKeyList);
while not eof(FKeyList) do
begin
inc(ResWdCount);
Readln(FKeyList,ResWords[ResWdCount]);
end;
close(FKeyList);
end;
Function ParceText(txt:string):integer;
var l,c:integer;
wd:string;
begin
c:=0;
l:=length(txt);
wd:='';
for i:=1 to l+1 do
begin
if ((not (txt in ServSymbSet))and(i<>l+1)) then
wd:=wd+txt
else
begin
inc(c);
Blocks[c]:=wd;
wd:='';
end;
end;
ParceText:=c;
end;
Function RemoveStrValues(Src:string):string;
var
s:string;
i:integer;
SV:boolean;
begin
s:='';
SV:=False;
For i:=1 to Length(Src) do
begin
if Src=#39{'} then
SV:=not SV;
if (not SV)and(Src<>#39) then
s:=s+Src;
end;
RemoveStrValues:=s;
end;
Function DelNumAndRes(Src:string):string;
var
i,j:integer;
cnt:integer;
s:string;
begin
s:='';
cnt:=ParceText(Src);
for i:=1 to cnt do
if (Blocks[1] in Digits)or(Blocks=' ')then
Blocks:='*';
for i:=1 to cnt do
for j:=1 to ResWdCount do
if UpperCase(Blocks)=ResWords[j] then
Blocks[i]:='*';
for i:=1 to cnt do
if (Blocks[i]<>'*')and(Blocks[i]<>' ') then
s:=s+Blocks[i]+' ';
DelNumAndRes:=s;
end;
begin
LoadRes;
St:='if s=''str''then b:=110+12*3.14+data[i];';
St:=RemoveStrValues(St);
St:=DelNumAndRes(St);
Writeln(St);
cnt:=ParceText(St);
writeln;
for i:=1 to cnt do
writeln(Blocks[i]);
readln;
end.
[/syntax]
В папке программы должен быть файл ResWords.txt с зарезервироваными словами(по слову в строке, символы в верхнем регистре).
Re: Задача на текстовые файлы и Динамические структуры данных- ПОМОГИТЕ!!!
Добавлено: 18 мар 2008, 19:01
paul11j
MOTOCoder, За код конечно спасибо, но мне он нужен на Pascal'е.(запускал на Паскале, но она работает не так как надо)