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)