Общая схема работы компилятора
Основные фазы компиляции
- Лексический анализ (сканер) –
это часть компилятора, которая читает литеры программы на исходном языке и строит из них слова (лексемы) исходного языка. На вход лексического анализатора поступает текст исходной программы, а выходная информация передается для дальнейшей обработки компилятором на этапе синтаксического разбора.
- Синтаксический анализ (разбор) – это основная часть компилятора на этапе анализа. Она выполняет выделение синтаксических конструкций в тексте исходной программы, обработанном лексическим анализатором. На этой же фазе компиляции проверяется синтаксическая правильность программы.
- Семантический анализ – это часть компилятора, проверяющая правильность текста исходной программы с точки зрения семантики входного языка. Кроме непосредственно проверки, семантический анализ должен выполнять преобразования текста, требуемые семантикой входного языка (такие, как добавление функций неявного преобразования типов). В различных реализациях компиляторов семантический анализ может частично входить в фазу синтаксической анализа, частично – в фазу подготовки к генерации кода.
program m4;
var c:boolean;
a,b:real;
begin
if a>b then #:=a-b else a:=b*0.3;
end.
program m4;
var c:boolean;
a,b:real;
begin
if a:=b else a:=a-b then a:=b*0.3;
end.
program m4;
var c:boolean;
a,b:real;
begin
if a>b then c:=a-b else a:=n*0.3;
end.