|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : ‚ ¤Ё¬ ‡Ґ«ҐЁ 2:5020/400 14 Nov 2002 21:46:16 To : Nick Kovaliov Subject : Re: транслятор с паскаля на си, написанн ый на паскале нужен. -------------------------------------------------------------------------------- Hello, Nick! You wrote to Вадим Зеленин on Thu, 14 Nov 2002 10:19:32 +0000 (UTC): ВЗ>> А наибольшая проблемка - ВЗ>> это вложенные функции и процедуры на паскале; NK> Это я и имел ввиду ... NK> Имхо проще это делать наворачиванием имён функций. Это-то как хочешь - хоть наворачивай, хоть последовательные "номерные" давай, только придумай как будешь коллизий избегать :) Фокус в том, что "изнутри" вложенной функции можно обратиться к переменным охватывающей функции. Для этого во вложенную функцию неявным параметром передаётся указатель на область памяти (в стеке), где расположены переменные охватывающей процедуры/функции. Когда вложенная функция обращается к переменным или параметрам охватывающей, она использует дополнительное "разыменование" :) Естественно, что с увеличением глубины вложения увеличивается глубина "разыменований". Паскальные-то компиляторы делают это сами. а тебе нужно будет ручками :) Подробности найдёшь посмотрев код под отладчиком. Сразу поймёшь, почему в C не стали делать такую фишку как вложенные функции :) ВЗ>> посмотри-ка - PtoC - ВЗ>> http://www.garret.ru/~knizhnik/ptoc/Readme.htm ВЗ>> он, правда, написан на C :) NK> Имхо, там неплохо расписаны NK> проблемки с такой конвертацией. NK> Кстати, судя по тому, что там написано, NK> весьма проблематично втупую переделать NK> этот конвертатор на паскаль. NK> Хотябы лексический и синтаксический анализатор, NK> сделаны с помощью LEX, YACC соответственно. ага, написать/найти программу конвертации из C в Pascal и отконвертировать :) типа http://www.astonshell.com/files/setupc2p.zip ну и Google в помощь :) Hа самом деле есть и LEX и YACC для Pascal. Из коммерческих - MKS Toolkit. И ещё есть что-то бесплатное... Кстати, для этого случая LEX не очень нужен - у Pascal несложная лексика :) И грамматика у него довольно простая. Если остановиться на уровне виртовского Pascal'а, то заметно проще, чем у C. Можно обойтись рекурсивным спуском, хотя это и противно :) кстати, посмотри ещё http://www.aco.ee/files/prog/pascal-time.html Удачи! Вадим Зеленин. E-mail: green@vista.spb.su PS Горе оутлуковое говорит, что надо писать правильно - не "Паскальные" (компиляторы) а Пасхальные или Hаскальные :) --- ifmail v.2.15dev5 * Origin: Vista (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.algorithms/91044d21d80f.html, оценка из 5, голосов 10
|