Другие языки программирования и технологии
задание на C++, подскажите путь решения хотя бы
дана программа на С++, записать в выходной файл построчно все идентификаторы, встречающиеся в этой программе
А это практическое задание, или для обучения? И есть какие-нибудь требования для, например, C++ name mangling?
А то можно программно программу скомпилировать и debug info в каком-нибудь легко распарсивабельном формате получить. Да и есть всякие командно-строковые тулзы для выпарсивания символов из скомпилированной программы (при сохранении там дебагной инфы) .
На UNIX-like системах обычно с этим проблем нет, просто заскриптуйте вызовы gcc/gdb/otool/ldd/nm/с++filt тулзов, ну или что там вместо них на Вашем диалекте операционки используется. . .
ЗЫ. Еще можно погуглить либы для syntax coloring, в качестве альтернативного решения. Что-то такое было, они наверняка должны идентификаторы выпарсивать уметь.
ЗЫЗЫЗЫ. А можно еще таким путем пойти. Если задание учебное, решение нужно "примерное" и на C++ name mangling можно забить. Ищите первую букву (знак подчеркивания пусть тоже будет буквой) , до которой идет не-буква. Проверяете, является ли она частью коммента или строкового литерала или директивы препроцессора или зарезервированного слова (список зарезервированных слов гуглится) . Если нет, то это начало идентификатора. Ток пока парсить идентификатор будете, не забывайте, что там еще цифры могут быть, но только не первым символом. По схемам Бэкуса-Науэра идентификатор определялся именно как-то так.
А то можно программно программу скомпилировать и debug info в каком-нибудь легко распарсивабельном формате получить. Да и есть всякие командно-строковые тулзы для выпарсивания символов из скомпилированной программы (при сохранении там дебагной инфы) .
На UNIX-like системах обычно с этим проблем нет, просто заскриптуйте вызовы gcc/gdb/otool/ldd/nm/с++filt тулзов, ну или что там вместо них на Вашем диалекте операционки используется. . .
ЗЫ. Еще можно погуглить либы для syntax coloring, в качестве альтернативного решения. Что-то такое было, они наверняка должны идентификаторы выпарсивать уметь.
ЗЫЗЫЗЫ. А можно еще таким путем пойти. Если задание учебное, решение нужно "примерное" и на C++ name mangling можно забить. Ищите первую букву (знак подчеркивания пусть тоже будет буквой) , до которой идет не-буква. Проверяете, является ли она частью коммента или строкового литерала или директивы препроцессора или зарезервированного слова (список зарезервированных слов гуглится) . Если нет, то это начало идентификатора. Ток пока парсить идентификатор будете, не забывайте, что там еще цифры могут быть, но только не первым символом. По схемам Бэкуса-Науэра идентификатор определялся именно как-то так.
Ну вот когда программу дадут, ты и запишешь ;)
Если нужна программа, делающая это самостоятельно, то ей на вход передается текст другой программы, а она в нем ищет последовательности, начинающиеся буквой и содержащие только буквы или цифры, и выводит их построчно, проверяя при этом, не попадалась ли эта последовательность раньшн.
Если нужна программа, делающая это самостоятельно, то ей на вход передается текст другой программы, а она в нем ищет последовательности, начинающиеся буквой и содержащие только буквы или цифры, и выводит их построчно, проверяя при этом, не попадалась ли эта последовательность раньшн.
От вас требуют написать лексический анализатор исходного текста программы на C++ и вывести лексемы-идентификаторы.
Если найти в сети грамматику C++ для yacc, такую программу можно написать минут за 10.
ЗЫ
В такой постановке задача некорректна: C++ имеет ОЧЕНЬ много диалектов, в каждом из которых свой набор ключевых слов, что будет мешать написать ПРАВИЛЬНУЮ грамматику.
Если найти в сети грамматику C++ для yacc, такую программу можно написать минут за 10.
ЗЫ
В такой постановке задача некорректна: C++ имеет ОЧЕНЬ много диалектов, в каждом из которых свой набор ключевых слов, что будет мешать написать ПРАВИЛЬНУЮ грамматику.
Что такое идентификаторы? Напиши полностью условие.
Идентификатор это специальное имя, например int indef;
вот indef это идентификатор, т. е. имя.
Задание легкое.
Я бы сделал так.
....
int i, j;
float k, l;
char 'a';
Присваиваешь им значение, рендомно, либо в объвление можно
далее вывод на экран,
потом в условном операторе уже проверяешь их. (Тут думать нужно как сделать, я не стал думать, ибо лень)
если это int записываешь в файл int и тд и тп
вот indef это идентификатор, т. е. имя.
Задание легкое.
Я бы сделал так.
....
int i, j;
float k, l;
char 'a';
Присваиваешь им значение, рендомно, либо в объвление можно
далее вывод на экран,
потом в условном операторе уже проверяешь их. (Тут думать нужно как сделать, я не стал думать, ибо лень)
если это int записываешь в файл int и тд и тп
Похожие вопросы
- Помогите с заданием по C#
- Помогите с заданием на C++
- Помогите с домашним заданием по c++
- Помогите с заданием, пожалуйста. C++.
- Программирование на c++. Непонятен ход решения, сама логика. Буду признателен за рабочий код.
- Подскажите учебник по C++! Подскажите учебник по С++, с самого нуля. Желательно с примерами и задачками!
- Дан массив а1,...а50. Найти в нем последовательности.. смотрите внутри. Задание на Си. Подскажите с чего начать
- Помогите, пожалуйста! Куда-то девается свободное место с диска C. Подскажите, что с ним еще можно сделать?
- Очень хочется начать работать в C++ подскажите как это сделать?) )
- C++. Подскажите ответ, есть какие нибудь правила инициализации вложенных структур ?