Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2014, 22:51   #1
Imamieva
Новичок
Джуниор
 
Регистрация: 16.06.2014
Сообщений: 2
По умолчанию Обработка символьных строк.

Помогите пожалуйстаа..
Дана программа написанная на языке Pascal.. Записать в выходной файл построчно все числовые константы, встречающиеся в этой программе, вместе с номером строки программы.
Imamieva вне форума Ответить с цитированием
Старый 17.06.2014, 08:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в общем случае задачка весьма непроста и потребует лексического разбора.
Можно, конечно, решить сильно упрощённую задачу, не разбирая код Паскаля на лексемы, т.е. не проводя лексический разбор, но тогда готовьтесь к тому, что ваша программа будет косячить, например, определять в строке s := ' Было это 17 июня '; 17 как числовую константу....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2014, 04:47   #3
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

да так то просто, в цикле ищи последовательность:
1) находим слово const (если мне не изменяет память)
2) ищим некое цельное слово (первый символ буква или _)
3) если после него встречается комбинация := то это слово - константа (вроде так же они записываются, или просто через равно?)
4) если после := первый найденный символ будет числом, то это и есть числовая константа
5) если находим слово, но не находим дальше := то значит все, мы вышли из раздела констант

Если я правильно понял топиксатора, то это норм алгоритм
Simply-Art вне форума Ответить с цитированием
Старый 19.06.2014, 07:49   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вроде так же они записываются, или просто через равно?
Ну не суть важно.
По-моему Серж прав. Все числовые константы, это в том числе и те, что вписаны прямо в выражения. И да, их от строк и имен нужно отличать уметь. Задача решаема, но посидеть покумекать маненько придется.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.06.2014, 08:34   #5
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну не суть важно.
По-моему Серж прав. Все числовые константы, это в том числе и те, что вписаны прямо в выражения. И да, их от строк и имен нужно отличать уметь. Задача решаема, но посидеть покумекать маненько придется.
А чем мой алгоритм плох? Трассировочную таблицу нарисуйте, проверьте.
Simply-Art вне форума Ответить с цитированием
Старый 19.06.2014, 08:45   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

угу. как я уже выше писал, тут всё упирается в конкретные детали задачи и качество решения.
В упрощённом виде вполне можно делать как предложил Simply-Art.

что-то чувствую, автор темы потерял(а) интерес к данном топику...


Цитата:
А чем мой алгоритм плох?
во-первых, не найдётся ни одной константы в таком коде:
Код:
program Test;
var x : integer;
begin
  x := 5 + 2*17;
 WriteLn('X = ',x,' 2 + 4 ', 2+4);
end.
в этом коде пять числовых констант

во-вторых,
как ваш алгоритм отработает такой код:
Код:
{ CONST X = 255; } 
var s : string;
begin
   s := 'CONST A = 12; B = 14';
   WriteLn(s);
end.
а в этом коде НЕТ числовых констант


ну и ещё куча разных подводных камней.

Последний раз редактировалось Serge_Bliznykov; 19.06.2014 в 08:51.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2014, 09:38   #7
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, не найдётся ни одной константы в таком коде:
Код:
program Test;
var x : integer;
begin
  x := 5 + 2*17;
 WriteLn('X = ',x,' 2 + 4 ', 2+4);
end.
в этом коде пять числовых констант
понятно, я не правильно понял что нужно искать просто
Simply-Art вне форума Ответить с цитированием
Старый 19.06.2014, 11:37   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А чем мой алгоритм плох?
Не плох. Я не говорил такого. Просто упрощен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.06.2014, 12:35   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

и не говорил, что алгоритм плох.

даже наоборот:
Цитата:
Сообщение от Serge_Bliznykov
В упрощённом виде вполне можно делать как предложил Simply-Art.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2014, 12:54   #10
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Можно, конечно, решить сильно упрощённую задачу, не разбирая код Паскаля на лексемы, т.е. не проводя лексический разбор, но тогда готовьтесь к тому, что ваша программа будет косячить, например, определять в строке s := ' Было это 17 июня '; 17 как числовую константу....
Как человек, писавший лексический анализатор Паскаля, могу сказать, что разборщик должен уметь пропускать строковые константы и комментарии.
Vapaamies вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заплнение матрицы и обработка символьных строк (С++) PhoenixPC Помощь студентам 0 23.05.2014 02:04
Обработка символьных строк. (TurboC++) flamen1003 Помощь студентам 0 24.04.2012 01:07
Обработка Символьных Строк неоспоримый Помощь студентам 2 01.04.2012 21:04
Обработка символьных строк 1OffSide Общие вопросы C/C++ 1 21.12.2010 01:07
подкоректировать.обработка символьных данных и строк felmor Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2008 19:12