Главная arrow С++ (часть 3) arrow Как работает транслятор?

Как работает транслятор?

Принцип работы транслятора прост. Он читает входной файл и записывает его в выходной файл. Если в этот момент транслятор обнаруживает проверяемое ключевое слово, то замещает его эквивалентным кодом на языке С++. Свойственная транслятору простота делает его очень полезным ДЛЯ экспериментов. Не составляет труда встроить в транслятор расширение язы-^ а потом испытать его. В следующих разделах дается подробное описание jguicflou части транслятора, реализующей предложенные ранее расширения.
Глобальные объявления
Код транслятора начинается с объявления следующих глобальных переменных и класса:
// Строка-заполнитель для отступов, string indent = "";
// Входной и выходной файловые потоки, if stream fin; of stream fout;
// Класс-исключение для синтаксических ошибок, class SyntaxExc {
string what; public :
SyntaxExc(char *e)  { what = string(e); }
string geterrorO  { return what; }
};
Текущая последовательность пробелов, предназначенная для формирования отступов, хранится в переменной indent. Эта строка применяется для вставки отступов определенного размера при замене экспериментальной конструкции несколькими строками кода.
Поток входного файла хранится в переменной fin, поток выходного файла содержится в переменной fout. При старте программы имена файлов, указанные в командной строке, связываются с переменными fin и fout. Синтаксические ошибки, возникающие во время трансляции проверяемой
КОНСТРУКЦИИ, СОЗДаЮТ объеКТ-ИСКЛЮЧеНИе ТИПа SyntaxExc. Класс SyntaxExc
содержит только строку, описывающую возникшую ошибку, но при желании вы можете добавить в него необходимую обработку.