Re: компилятор

From
Nick Kovaliov ()
To
Vladimir Chizhov
Date
2002-11-04T09:47:28Z
Area
RU.ALGORITHMS
From: "Nick Kovaliov" <Nick@urm.ru>

    > Ну, в БНФ я язык описал. А вот грамматики пока нет.
БНФ - это почти одно и то же, что и КС-грамматика.

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

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

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

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

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

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

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

Всё предельно просто ...
Тебе расписать все случаи ? ...
Тогда грамматику сюда давай
(ну или БНФ форму, что то же самое).

Думаю, что в теорию семантики тебе лезть не нужно.

    > Будут бычить, скажу в Яве тоже для стринга "+" перегружен =0)
;-) Бычить :)

Простейшую перегруженность, кстати,
не так и сложно сделать, помогая грамматикой.
А именно (например) -

<mul_int_expr> -> <int_expr> <*> <int_expr>
<mul_complex_expr> -> <complex_expr> <*> <complex_expr>

Сложности возникают тогда, когда во всякие mul_int_expr
попадают другие выражения, тут уже вывод типов нужен какой-нить,
а это на грамматике уже не завязать.
Тут нужно проверять тип функции, переменной, и всё такое ...
Хоть это не так и сложно, но мороки много.

    > О! Кстати, не подскажешь заодно,
    > что такое структурная и именная эквивалентность типов ?
Честно, не знаю.
Но догадываюсь, что именная - это по имени, то есть по использованию
(например, для некоторых типов операций массив и лист эквивалентны)
А структурная - это по семантике, то есть по реализации.

    > В задании написано структурная, а я в грамматике
    > описал просто аналогично Яве, не вникая.

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

До встречи, всего наилучшего !


--- ifmail v.2.15dev5
 * Origin: Demos online service (2:5020/400)