компилятор

From
Vladimir Chizhov (2:5030/1359.13)
To
Nick Kovaliov
Date
2002-11-09T02:45:32Z
Area
RU.ALGORITHMS
``` Это Вам не это! Это из "CARBON.COPIES".

Приветствую, Nick!

Отвечаю на письмо, написанное тобой к Vladimir Chizhov:

 >> Тут все строго, надо юзать грамматики слабого предшествования.
 NK> Панятна.
 NK> Значит, ты уже знаешь про разные синтаксические анализаторы ?

Не-а. Синтаксический анализатор пишет другой человек (мы вдвоем пишем), поэтому я пока не читал про них. Но завтра почитаю, потому что лексический уже написал.

 >> Короче нужен транслятор из языка в ассемблерный код.
 >> Язык - Java, но сильно упрощенная.
 NK> Классы есть ? ...

Угу. Но опять же упрощенные. Никаких спецификаторов: ни доступа, ни static. Но с полями и методами.

 >> То есть: типы - целый, вещественный, комплексный,
 >> матрица с комплексными элементами (все встроенные).
 NK> То есть есть тип матриц, а массива - нет ?
 NK> Причём только с комплексными эл-тами ?

Да.

 >> if - отсутствует, цикл - только с постусловием.
 >> Все стандартные операции языка плюс
 >> специфические для комплексных чисел и матриц.
 >> Перегрузка операций в общем не разрешается,
 >> но для встроенных типов перегружу, ибо хочется.
 NK> Ну приблизительно понятно.
 NK> Классы есть ?
 NK> new есть ? (вдруг надо будет Garbage Collector делать)

Есть. Для создания экземпляра класса. И... без GC обойдемся. Область видимости по-любому придется отслеживать, поскольку есть классы и методы. Поэтому килять объекты будем сразу.

 NK> Если есть, но насколько они упрощены
 NK> (или такие же) по сравнению с явой ?

Все что было написано выше + без наследования, без реализации интерфейсов, без сериализации... Короче, совокупность полей и методов. Больше нифига. Даже внутренних нет. Про безымянные помалкиваю.

 NK> Насколько я понимаю, проверять совпадения типов можно грамматикой.
 NK> Вроде как тут можно не мудрить, и сделать просто.

Вот так мы и сделаем =0)

 NK> Каждой операции свой код, для неё соответствующий ...

 NK> Ну, например, встречается
 NK> do { <expression> } while (n == 0)
 NK> Вот и генери для этого

 NK> do_label:
 NK>     асм-код твоего <expression>
 NK>     cmp N, 0
 NK>     jz do_label

 NK> Всё предельно просто ...
 NK> Тебе расписать все случаи ? ...

Да нет, спасибо. См. свою последнюю фразу =0)

 >>NK> И выясни, можно ли задачу решить другими,
 >>NK> более простыми способами.
 >> Взяткой преподу? =0)
 NK> Мож и так самое простое ;))
 NK> Но я бы лично из гордости всё сам бы сделал ! :-)

Дык так оно и будет. Но дело даже не в гордости, а в желании.

До встречи!

... The rest is silence.         (c) W. Shakespeare
---
 * Origin: The very end of letter (2:5030/1359.13)