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)