На тот случай, если заданий никто не даст, пишу, что придумал с утра( по большей части, чтоб не забыть, а также, чтоб учесть все недостатки ).
Пусть будет текстовый файл такого формата:
object A
{
color = "red";
value = 100!;
circle;
}
object B : A, C
{
color = "green";
circle;
}
object C
{
value = time();
square;
}
object D
{
color = "blue";
value = 100 + A.value;
value2 = C.value * value;
}
show circle;
show A.value;
show value > 100!;
думаю задача очевидна, но конечно же поподробней:
object A
{
color = "red";
value = 100!;
circle;
}
это описание объекта( не типа, а именно объекта ), у него есть поля, которые бывают трех типов:
circle - признак, не имеет значения, просто означает, что A это круг
color = «red» - текстовое поле со значением «red»
value = 100!; - числовое поле( о нем будет дальше )
Смотрим дальше:
object B : A, C
{
color = "green";
circle;
}
это наследование, тут все просто - все поля из A, C теперь есть и в B, если есть одинаковые поля, то приоритетность - B, С, А( по убыванию ), т.е. у B color = «green», а value = time()
Про чиcловые поля - они задаются в виде выражений, допустимые операции +-*/ и !( факториал ), естественно присутствуют скобки (), в качестве операндов любые целые числа( в десятичной системе ), также time() ( то же, что и в С ) - чтоб разнообразить результаты на итерациях, а также любое числовое значение из этого/другого объекта( A.value etc. ), в случае рекурсии в выражениях - возвращать 0
Последняя часть:
show circle;
show A.value;
show value > 100!;
тут все просто - выводит на экран объекты удовлетворяющие условию или их свойства show circle - у которых есть поле circle show A.value - выводит значение любого выражения, например A.value + B.value * 2 show value > 100!; - состоит из «имя поля» + «операция сравнения» + «аргумент»( любое выражение ), ищет все объекты по условию
имена объектов и свойств состоят только из a..A, z..Z, 0..9, имена регистрозависимые
текстовые значения могут быть длинной до 65535 символов
П.С. наверняка что-то упустил так как пишу все с головы, жду критики, вопросов, уточнений условия и т.п.
П.П.С. хотелось бы, чтоб mv тоже попробовал после утверждения задания( если таки будет оно, а не другое ) решить его на Lisp( задание вроде под Lisp подходит ) - заодно и скорость работы программ можно будет сравнить
П.П.П.С. думаю полезно в текстовый файл добавить два параметра:
iterations = 100000
log = off