Re: транслятор с паскаля на си, написанн ый на паскале нужен.
- From
- Вадим Зеленин ()
- To
- Nick Kovaliov
- Date
- 2002-11-14T20:46:16Z
- Area
- RU.ALGORITHMS
ws.dfncis.de>
From: "Вадим Зеленин" <green@vista.spb.su>
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 в помощь :)
На самом деле есть и 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 Горе оутлуковое говорит, что надо писать правильно - не "Паскальные"
(компиляторы) а Пасхальные или Наскальные :)
--- ifmail v.2.15dev5
* Origin: Vista (2:5020/400)