class String
def kuzhi
puts 'Hello, Kuzya'
end
end
Поиск классов
В файле определены классы. Нужны подсчитать их кол-во.
Подкинте какие-нибудь идеи, только не подумайте, что я хочу чтобы ВЫ за меня решали.
Я как сначала думал: считаю строку, проверяю на вхождения "class", но тут у меня возникают проблемы.
Если "{" находится вдругой строке и дальше у меня не получается???
вам помогут регулярные выражения. почитайте документацию по библиотеке pcre, чтобы не изобретать велосипед.
2) Каждое ключевое слово class описывает какой-то класс (исключение составляют случаи "будущего" определения - т. е. мы говорим компилятору, что такой класс будет). Также нужно учитывать случаи вложенных классов.
3) Для полного и правильного анализа нужен полный синтаксический анализатор языка C++ (читай, компилятор). Я не думаю, что преподаватель это имел в виду...
С учетом всего этого, есть два варианта - писать полный лексико-синтаксический анализатор (или просто взять готовый компилятор), или просто анализировать количество слов class :)
строка начинается со слова class (1 в уме) идем дальше если ; в конце строки (перед \n) нет, то считаем кол-во классов +1.
если есть ; в конце строки, то тогда это предварительное определение )
а еще не плохо было бы указать язык программирования :D
в общем, это самый простой вариант. как бы вот.
Код:
не создает новый класс в Ruby а добавляет метод kuzhi в уже существующий класс. Если тупо считать слова 'class' то результат будет неверным.
Вобщем, нужно уточнять условия задачи.
ну по косвенным признакам парсить надо код С++. Автор, еще раз говорю, не изобретайте велосипед. используйте регулярные выражения. регулярками эта задача решается при минимуме кода :)
Цитата: cheburator
1) Каждое определение класса начинается с ключевого слова class (попробуйте меня опровергнуть).
:)
Код:
#define KLASS class
KLASS MyClass {}
KLASS MyClass {}
(это шутка)
Цитата: cheburator
"будущего" определения
Цитата: Тень Пса
предварительное определение )
Это называется "объявление".
Цитата: squirL
ну по косвенным признакам парсить надо код С++. Автор, еще раз говорю, не изобретайте велосипед. используйте регулярные выражения. регулярками эта задача решается при минимуме кода :)
Ага.
Только не забудь в регулярке и такие случаи:
Код:
typedef class{} Name;
class {} instance;
class {} instance;
А это не классы:
Код:
"class A {}"
// class B{}
// class B{}
Это как-то не интересно... :(
Вот подсчитать классы в рантайме - это интереснее.
Вот здесь бы и синглтон, наверное, пригодился бы... :)
Цитата: Green
:)
А это не классы:
Код:
typedef class{} Name;
class {} instance;
class {} instance;
А это не классы:
Код:
"class A {}"
// class B{}
// class B{}
и что?
Цитата: squirL
и что?
То, что такие случаи надо учесть при подсчете классов.
Цитата: Green
То, что такие случаи надо учесть при подсчете классов.
тяжело спорить :-)