то нужно прочитать очередной символ из анализируемого слова, а затем вызвать функцию вывода, соответствующую данному нетерминальному символу.
Если анализируемая цепочка символов перебирается от первого до последнего символа (в соответствии с синтаксической диаграммой) без сбоя, тогда анализ прошел успешно. Если удается от входной вершины синтаксической диаграммы добраться до выходной, пройдя последовательно все символы анализируемой цепочки, — анализ прошел успешно.
Трансляторы — программы, осуществляющие перевод с какого-то входного языка на выходной. Если входным языком является алгоритмический язык, а выходным — ассемблер или даже машинные коды, то такой транслятор называется компилятором.
Если входным и выходным языками является алгоритмический язык высокого уровня, тогда такой транслятор называется препроцессором (cpp.exe — в C).
Иногда происходит перевод с языка высокого уровня на язык некоторых промежуточных команд, которые тут же и выполняются. Такой транслятор называется интерпретатором. Работает он медленнее, чем компилятор.
Имеется текст на исходном языке.
На всех этапах происходит обработка ошибок, а также заполняются и обрабатываются таблицы (идентификаторов, объектов, команд).
Лексема — наименьшей длины цепочка символов, имеющая самостоятельный смысл:
void get( void ); //функция получения новой лексемы
void number( void ); //если очередная лексема - число
void word( void ); //если очередная лексема - идентификатор
char *add( char *nm ); //для занесения идентификаторов в таблицу идентификаторов TNM
В результате работы синтаксического анализатора получаются синтаксические структуры: множитель, слагаемое, выражение, оператор, функция и т. д. Каждой такой структуре будет поставлен в соответствие нетерминальный символ.
void prog( void ); //программа
void dconst( void ); //описание констант
void cons( void ); //константы
void dvarb( void ); //описание переменных
void dfunc( void ); //описание функций
int param( void ); //параметры функции
int body( void ); //тело функции
void stml( void ); //последовательность операторов
void stat( void ); //оператор
void expr( void ); //выражение
void term( void ); //слагаемое
void fact( void ); //множитель
int fctl( void ); //последовательность выражений
void exam( int lx ); //проверка лексемы
По ходу синтаксического анализа можно генерировать промежуточный код, и осуществить оптимизацию. О генерации промежуточного кода мы уже говорили.
int gen( int co, int op ); //функция занесения команд в TCD
Из букв или из букв и цифр, но первой должна быть буква. Длина — до 40 символов.
Только целого типа.
Локальные переменные хранятся динамически, а глобальные — статически (выделяется на все время).
int v1, v2, v3;
Только числовые.
const иден1=число1, иден2=число2;
Всего 11 слов:
begin, end, read, print, return, if, then, while, do, int, const.
имя_функции( формальные_параметры )
begin
описание_локальных_переменных_и_констант;
опер1;
опер2;
.
.
.
оперn
end
Перед end нельзя ставить ‘;’, а после — ‘.’.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.