- •2006 Оглавление:
- •1. Постановка задачи
- •Исходные данные:
- •2. Описание входного языка:
- •2.1. Описание синтаксиса входного языка
- •2.2. Описание семантики входного языка
- •Объявления и области действия
- •Оператор вывода
- •Оператор ввода
- •Зарезервированные функции
- •3. Описание этапа лексического анализа
- •3.1. Определение типов лексем
- •3.2. Определение синтаксиса лексем
- •3.3. Структуры данных
- •50 Таблица констант
- •3.5. Результаты работы лексического анализатора
- •4. Описание этапа синтаксического анализа:
- •4.1. Построение кс-грамматики входного языка
- •4.1.1. Определение программы
- •4.1.6. Подграмматика арифметических операций
- •4.2. Описание промежуточного языка (триады)
3. Описание этапа лексического анализа
На входе лексического анализатора находится последовательность UNICODEсимволов представляющая программу на входном языке. Задача ЛА состоит в разделении этой последовательности на слова языка (лексемы).
чтение исходной программы и выделение из нее лексем;
построение таблиц идентификаторов и констант;
преобразование входной программы (поток литер) в поток токенов, в котором каждый токен представляет лексему.
3.1. Определение типов лексем
Будем рассматривать следующие типы лексем:
Идентификаторы
Константы (числовые, строковые, символьные)
Ключевые слова входного языка
Знаки операций (арифметические, логические, отношения)
Разделители
Соотношение между токенами и лексемами для различных языковых конструкций:
Токен |
Лексема |
Языковая конструкция |
ID |
<идентификатор> |
Идентификаторы |
CI |
1, 1000,-20 |
Целочисленная константа |
CR |
1.15 |
Вещественная константа |
CC |
‘f’ |
Символьная константа |
CS |
“test” |
Строковая константа |
UAOP |
++, -- |
Унарные арифметические операции |
AAOP |
+, - |
Аддитивные арифметические операции |
MAOP |
*, / |
Мультипликативные арифметические операции |
NLOP |
! |
Отрицание (логическая операция) |
OLOP |
|| |
ИЛИ (логическая операция) |
ALOP |
&& |
И (логическая операция) |
EOLOP |
^ |
Исключающее ИЛИ (логическая операция) |
RLOP |
>, <, < =, > = |
Отношения (логические операции) |
EQLOP |
= =, ! = |
Эквивалентность (логические операции) |
AO |
= |
Операторы присваивания |
SRLP |
( |
Открывающая круглая скобка |
SRRP |
) |
Закрывающая круглая скобка |
SRLB |
[ |
Открывающая квадратная скобка |
SRRB |
] |
Закрывающая квадратная скобка |
SRLCB |
{ |
Открывающая фигурная скобка |
SRRCB |
} |
Закрывающая фигурная скобка |
SRSM |
; |
Точка с запятой |
SRQN |
? |
Вопросительный знак |
SRCN |
: |
Двоеточие |
SRPT |
. |
Точка |
SRCA |
, |
Запятая |
KWWL |
while |
Ключевые слова |
KWIF |
if | |
KWEL |
else | |
KWGT |
goto | |
KWRD |
read | |
KWWR |
write | |
KWT |
true | |
KWF |
false | |
KWI |
int | |
KWD |
double | |
KWS |
String | |
KWC |
char | |
KWPG |
package | |
KWIM |
import | |
KWCL |
class | |
KWVD |
void | |
KWNW |
new | |
KWNL |
null | |
KWMN |
Main | |
KWLN |
length | |
KWCC |
concat | |
KWSS |
substring | |
KWRP |
replace | |
KWFN |
find |
Расшифровка сокращений:
ID– identifier
CI – constant integer
CR – constant real
CC – constant char
CS – constant string
UAOP – unary arithmetic operation
AAOP – additive arithmetic operation
MAOP – multiplicative arithmetic operation
NLOP – negation logical operation
OLOP – or logical operation
ALOP – and logical operation
EOLOP – exclusive or logical operation
RLOP – relation logical operation
EQLOP – equal logical operation
AO – appropriation operation
SRLP – separator left parenthesis
SRRP – separator right parenthesis
SRLB – separator left bracket
SRRB – separator right bracket
SRLCB – separator left curly brace
SRRCB – separator right curly brace
SRSM – separator semicolon
SRQN – separator question
SRCN – separator colon
SRPT – separator point
SRCA – separator comma
KWWL – key word while
KWIF – key word if
KWEL – key word else
KWGT – key word goto
KWRD – key word read
KWWR – key word write
KWT – key word true
KWF – key word false
KWI – key word int
KWD – key word double
KWS – key word string
KWC – key word char
KWPG – key word package
KWIM – key word import
KWCL – key word class
KWVD – key word void
KWNW – key word new
KWNL – key word null
KWMN – key word main
KWKN – key word length
KWCC – key word concat
KWSS – key word substring
KWRP – key word replace
KWFN – key word find