Основы трансляции. Рыбанов А.А. - 12 стр.

UptoLike

Составители: 

12
Правила грамматики в нормальной форме Бекуса-Наура:
W= <программа> ::= BEGIN <последовательность операторов> END
L= <последовательность операторов> ::= <оператор>|
<оператор>;<последовательность операторов>
S= <оператор> ::= <идентификатор>:=<выражение> |
OUTPUT(<выражение>) |
WHILE <условие> DO <последовательность операторов> ENDDO |
IF <условие> THEN <последовательность операторов> ENDIF |
IF <условие> THEN <последовательность операторов>
ELSE <последовательность операторов> ENDIF
B = <условие> ::= <выражение> <знак отношения> <выражение>
E= <выражение> ::= <терм> | перация типа сложения> <терм> |
<терм> <операция типа сложения> <терм> |
<операция типа сложения> ерм><операция типа сложения><терм>
T=<терм> ::= <множитель> | <множитель> <операция типа умножения> <множитель>
P=<множитель> ::= <идентификатор> | <константа> | READ | (<выражение>)
I=<идентификатор> ::= <буква> | <идентификатор> <буква> |
<идентификатор> <цифра>
K=<константа> ::= <цифра> | <константа> <цифра>
O=<знак отношения> ::= > | < | >= | <= | = |<>
M=<операция типа умножения> ::= * | /
N=<операция типа сложения> ::= + | -
A= <буква> ::= a | b | ...| z
C= <цифра> ::= 0 | 1 | ...| 9
Данная грамматика недостаточно полно описывает синтаксис входной
программы. Например, ключевые слова являются цепочками символов, хотя в
языке это терминалы, между словами языка в тексте может быть произвольное
количество пробелов и т.д.
Для устранения этих проблем предложения исходной программы
удобнее представлять в виде последовательности лексем - элементов языка,
внутреннее строение которых несущественно при синтаксическом анализе.
Например, лексемой может быть ключевое слово, имя переменной,
константа и т.д. Просмотр исходного текста программы, распознавание и
классификация различных лексем называется лексическим анализом.
2.2. Лексический анализатор
Часть транслятора, которая выполняет лексический анализ, называется
лексическим анализатором. Лексический анализатор воспринимает исходный
текст программы и преобразует его в последовательность лексем -
промежуточный язык, удобный для синтаксического анализа. Кроме этого,
лексический анализатор строит таблицы (массивы) идентификаторов и
констант. Таким образом, основными функциями лексического анализатора
являются: построение последовательности лексем; построение таблицы
идентификаторов; построение таблицы констант; расстановка ссылок для
передачи управления.
Для повышения эффективности последующих действий лексемы обычно
представляются в виде пары (код, значение). На этапе синтаксического анализа
используется первая компонента пары - код. Вторая компонента - значение,
  Правила грамматики в нормальной форме Бекуса-Наура:
   W= <программа> ::= BEGIN <последовательность операторов> END
   L= <последовательность операторов> ::= <оператор>|
                                              <оператор>;<последовательность операторов>
   S= <оператор> ::= <идентификатор>:=<выражение> |
                      OUTPUT(<выражение>) |
                      WHILE <условие> DO <последовательность операторов> ENDDO |
                      IF <условие> THEN <последовательность операторов> ENDIF |
                      IF <условие> THEN <последовательность операторов>
                                     ELSE <последовательность операторов> ENDIF
   B = <условие> ::= <выражение> <знак отношения> <выражение>
   E= <выражение> ::= <терм> | <операция типа сложения> <терм> |
                         <терм> <операция типа сложения> <терм> |
                         <операция типа сложения> <терм> <операция типа сложения><терм>
   T=<терм> ::= <множитель> | <множитель> <операция типа умножения> <множитель>
   P=<множитель> ::= <идентификатор> | <константа> | READ | (<выражение>)
   I=<идентификатор> ::= <буква> | <идентификатор> <буква> |
                               <идентификатор> <цифра>
   K=<константа> ::= <цифра> | <константа> <цифра>
   O=<знак отношения> ::= > | < | >= | <= | = |<>
   M=<операция типа умножения> ::= * | /
   N=<операция типа сложения> ::= + | -
   A= <буква> ::= a | b | ...| z
   C= <цифра> ::= 0 | 1 | ...| 9
     Данная грамматика недостаточно полно описывает синтаксис входной
программы. Например, ключевые слова являются цепочками символов, хотя в
языке это терминалы, между словами языка в тексте может быть произвольное
количество пробелов и т.д.
     Для устранения этих проблем предложения исходной программы
удобнее представлять в виде последовательности лексем - элементов языка,
внутреннее строение которых несущественно при синтаксическом анализе.
     Например, лексемой может быть ключевое слово, имя переменной,
константа и т.д. Просмотр исходного текста программы, распознавание и
классификация различных лексем называется лексическим анализом.

   2.2. Лексический анализатор
   Часть транслятора, которая выполняет лексический анализ, называется
лексическим анализатором. Лексический анализатор воспринимает исходный
текст программы и преобразует его в последовательность лексем -
промежуточный язык, удобный для синтаксического анализа. Кроме этого,
лексический анализатор строит таблицы (массивы) идентификаторов и
констант. Таким образом, основными функциями лексического анализатора
являются: построение последовательности лексем; построение таблицы
идентификаторов; построение таблицы констант; расстановка ссылок для
передачи управления.
   Для повышения эффективности последующих действий лексемы обычно
представляются в виде пары (код, значение). На этапе синтаксического анализа
используется первая компонента пары - код. Вторая компонента - значение,
                                          12