Принцип работы транслятора прост. Он читает входной файл и записывает его в выходной файл. Если в этот момент транслятор обнаруживает проверяемое ключевое слово, то замещает его эквивалентным кодом на языке С++. Свойственная транслятору простота делает его очень полезным ДЛЯ экспериментов. Не составляет труда встроить в транслятор расширение язы-^ а потом испытать его. В следующих разделах дается подробное описание 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 содержит только строку, описывающую возникшую ошибку, но при желании вы можете добавить в него необходимую обработку.
|