Главная arrow С++ (часть 3) arrow Функция main ( )

Функция main ( )

Функции main о — две обязанности. Во-первых, она открывает входной и Выходной файлы, заданные в командной строке. Код, предназначенный для этого, хорошо знаком всем программистам на языке С++. Во-вторых, в ней
выполняется главный цикл трансляции, в котором преобразуются экспериментальные конструкции. Далее приведен главный цикл трансляции.
try {
// Главный цикл трансляции, while(gettoken(token))  (
// Пропускает комментарии //. if(token == "//") { do {
fout « token; gettoken(token); } while(token.find('\n') == string::npos); fout « token;
}
// Пропускает комментарии /*. else if(token =="/*-)  { do {
fout « token; gettoken(token); } while(token != "*/"); fout « token;
}
// Пропускает строку в кавычках, else if(token == "\"")  { do {
fout « token; gettoken(token); } while(token != "\n")  ; fout « token;
}
else if(token == "foreach") foreach() ; else if(token == "cases") cases(); else if(token == "repeat") repeat();
•   else if (token == "until") until(); else if (token == "typeof") typeof(); else fout « token;
}
) catch (SyntaxExc exc)  { cout « exc.geterror() « endl; return 1;
}
В каждом проходе главного цикла читается очередная лексема из входного файла. Если она не требует трансляции, то записывается в выходной файл. Если же лексема содержит одно из экспериментальных ключевых слов, вызывается соответствующая функция для трансляции его в эквивалентный код на языке С++. Обратите внимание на то, что в цикле пропускаются комментарии и строки в кавычках, т. е. они копируются в выходной файл без предварительного поиска в них экспериментальных ключевых слов.
Если обнаруживается синтаксическая ошибка в процессе трансляции проверяемого ключевого слова, кодом, выполняющим трансляцию, генерируется объект-исключение типа SyntaxExc и передается вызываемому в функции main о обработчику исключений catch, который просто отображает ошибку на экране. Вы можете усовершенствовать сообщение об ошибке, включив в него номер ошибочной строки или другую интересующую вас информацию.