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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2017, 19:56   #1
DonSangre
Новичок
Джуниор
 
Регистрация: 03.11.2017
Сообщений: 3
По умолчанию Кол-во идентификаторов

Здравствуйте. Нужно написать программу на чистом Си, которая в коде на Си будет считать кол-во идентификаторов. При написании возникают некоторые исключения(ключевые слова для объявления идентификаторов,int, char и т.д., могут быть, например, в кавычках, или идентификаторы функций могут повторяться при объявлении и определении). Не знаю, как лучше сделать.
DonSangre вне форума Ответить с цитированием
Старый 03.11.2017, 20:47   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Читайте как делаются лексические анализаторы, выбирайте наиболее понравившийся способ и на основе него ищите лексемы-идентификаторы и считайте их.
pu4koff вне форума Ответить с цитированием
Старый 03.11.2017, 20:57   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от DonSangre Посмотреть сообщение
Нужно написать программу на чистом Си, которая в коде на Си будет считать кол-во идентификаторов.
это называется парсер.


Цитата:
Сообщение от DonSangre Посмотреть сообщение
на чистом Си
Тогда печаль, читайте книгу драконов или другие материалы отсюда
https://stackoverflow.com/questions/...ite-a-compiler
https://meta.stackexchange.com/quest...on-book-please

Если б не на чистом С, то я б взял какую-нибудь библиотеку для генерации парсера из грамматики типа ANTLR.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.11.2017, 21:06   #4
DonSangre
Новичок
Джуниор
 
Регистрация: 03.11.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Читайте как делаются лексические анализаторы, выбирайте наиболее понравившийся способ и на основе него ищите лексемы-идентификаторы и считайте их.
Лексические анализаторы? Я мельком читал про них. Одна из ступеней создания компиляторов и интерпретаторов. Однако я не думал обращаться к подобной литературе, ибо фраза "лексический анализатор" встречается в основном только в подобной литературе...
DonSangre вне форума Ответить с цитированием
Старый 03.11.2017, 21:13   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от DonSangre Посмотреть сообщение
Одна из ступеней создания компиляторов и интерпретаторов.
так вам и нужны первые ступени компилятора.
Лексер, парсер.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 03.11.2017, 21:23   #6
DonSangre
Новичок
Джуниор
 
Регистрация: 03.11.2017
Сообщений: 3
По умолчанию

Забавно. Вообще-то, это "простенькое" задание из лабораторной... Я не думал о рассмотрении создания чего-то вроде парсера. А Вы так... Навскидку, можете набросать какой-нибудь алгоритм или конкретно что-то посоветовать из литературы? А то времени очень мало.
DonSangre вне форума Ответить с цитированием
Старый 03.11.2017, 22:34   #7
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от DonSangre Посмотреть сообщение
Забавно. Вообще-то, это "простенькое" задание из лабораторной... Я не думал о рассмотрении создания чего-то вроде парсера. А Вы так... Навскидку, можете набросать какой-нибудь алгоритм или конкретно что-то посоветовать из литературы? А то времени очень мало.
Навскидку есть инструменты, которые их делают. Вручную никто давно не морочится.
https://en.wikipedia.org/wiki/Lexical_analysis
alexzk вне форума Ответить с цитированием
Старый 04.11.2017, 22:51   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от DonSangre Посмотреть сообщение
Забавно. Вообще-то, это "простенькое" задание из лабораторной... Я не думал о рассмотрении создания чего-то вроде парсера. А Вы так... Навскидку, можете набросать какой-нибудь алгоритм или конкретно что-то посоветовать из литературы? А то времени очень мало.
Ну, раз лаба, то как вариант: через strtok делить всё на токены без разбора, а дальше уже проверять. Если токен - это int, char и что еще захотите добавить - значит счётчик не меняем. Если токен начинается с кавычки, значит строковая константа и не считается. Если atoi даёт число, значит числовая константа. В остальных случаях значит у нас идентификатор. Идентификаторы вот придётся как-то хранить, чтобы они не дублировались. Хэш-таблица, множество или что под это взять - смотрите сами. Можно и просто в массив совать и перебором искать идентификатор. В конечном итоге соответственно просто нужно вывести количество значений в коллекции.
pu4koff вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конечный автомат (распознавание идентификаторов) thearthurio Помощь студентам 6 08.02.2017 16:07
Проблема с обьявлением идентификаторов в С++ Faraon9 Помощь студентам 12 12.12.2012 00:06
Организация таблиц идентификаторов Artemka89 Общие вопросы C/C++ 0 17.05.2010 01:07
Организация таблицы идентификаторов freez89 Помощь студентам 1 06.04.2010 00:46
Найти кол-во целых чисел в первой последовательности и кол-во нечетных во второй. DjDeniels-61 Помощь студентам 7 28.06.2009 13:04