|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Nick Kovaliov 2:5020/400 04 Nov 2002 10:47:28 To : Vladimir Chizhov Subject : Re: компилятор -------------------------------------------------------------------------------- > Hу, в БHФ я язык описал. А вот грамматики пока нет. БHФ - это почти одно и то же, что и КС-грамматика. > Тут все строго, надо юзать грамматики слабого предшествования. Панятна. Значит, ты уже знаешь про разные синтаксические анализаторы ? > Короче нужен транслятор из языка в ассемблерный код. > Язык - Java, но сильно упрощенная. Классы есть ? ... > То есть: типы - целый, вещественный, комплексный, > матрица с комплексными элементами (все встроенные). То есть есть тип матриц, а массива - нет ? Причём только с комплексными эл-тами ? > if - отсутствует, цикл - только с постусловием. > Все стандартные операции языка плюс > специфические для комплексных чисел и матриц. > Перегрузка операций в общем не разрешается, > но для встроенных типов перегружу, ибо хочется. Hу приблизительно понятно. Классы есть ? new есть ? (вдруг надо будет Garbage Collector делать) Если есть, но насколько они упрощены (или такие же) по сравнению с явой ? Hасколько я понимаю, проверять совпадения типов можно грамматикой. Вроде как тут можно не мудрить, и сделать просто. Каждой операции свой код, для неё соответствующий ... Hу, например, встречается do { <expression> } while (n == 0) Вот и генери для этого do_label: асм-код твоего <expression> cmp N, 0 jz do_label Всё предельно просто ... Тебе расписать все случаи ? ... Тогда грамматику сюда давай (ну или БHФ форму, что то же самое). Думаю, что в теорию семантики тебе лезть не нужно. > Будут бычить, скажу в Яве тоже для стринга "+" перегружен =0) ;-) Бычить :) Простейшую перегруженность, кстати, не так и сложно сделать, помогая грамматикой. А именно (например) - <mul_int_expr> -> <int_expr> <*> <int_expr> <mul_complex_expr> -> <complex_expr> <*> <complex_expr> Сложности возникают тогда, когда во всякие mul_int_expr попадают другие выражения, тут уже вывод типов нужен какой-нить, а это на грамматике уже не завязать. Тут нужно проверять тип функции, переменной, и всё такое ... Хоть это не так и сложно, но мороки много. > О! Кстати, не подскажешь заодно, > что такое структурная и именная эквивалентность типов ? Честно, не знаю. Hо догадываюсь, что именная - это по имени, то есть по использованию (например, для некоторых типов операций массив и лист эквивалентны) А структурная - это по семантике, то есть по реализации. > В задании написано структурная, а я в грамматике > описал просто аналогично Яве, не вникая. >NK> И выясни, можно ли задачу решить другими, >NK> более простыми способами. > Взяткой преподу? =0) Мож и так самое простое ;)) Hо я бы лично из гордости всё сам бы сделал ! :-) До встречи, всего наилучшего ! --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/246325700dcf1.html, оценка из 5, голосов 10
|