- •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. Описание промежуточного языка (триады)
4.2. Описание промежуточного языка (триады)
Код операции |
Операнд1 |
Операнд2 |
Семантика |
MOV |
b |
|
a = b |
ADD |
a |
b |
a + b |
SUB |
a |
b |
a – b |
AA |
a |
|
a++ |
MM |
a |
|
a-- |
MUL |
a |
b |
a * b |
DIV |
a |
b |
a / b |
NEG |
a |
|
-a |
OR |
a |
b |
a || b |
AND |
a |
b |
a && b |
NOT |
a |
|
!a |
L |
a |
b |
a < b |
LE |
a |
b |
a <= b |
G |
a |
b |
a > b |
GE |
a |
b |
a >= b |
EQL |
a |
b |
a == b |
NEQL |
a |
b |
a != b |
I2D |
a |
|
Преобразование целого aк вещественому |
RD |
a |
|
Read(a) |
WR |
a |
|
Write(a) |
TP |
a |
|
<тип>a |
DEFL |
l |
|
Определение метки l |
BRL |
l |
|
Безусловный переход на l |
BF |
l |
E |
Переход к триаде с меткой l, если значение выраженияEравно «ложь» |
LEN |
a |
|
length(a) |
CONC |
a |
b |
concat(a,b) |
FND |
s1 |
s2 |
find(s1,s2) |
RPLSTR |
s1 |
s2 |
replace(s1,s2,s3) |
. |
s3 |
| |
SBSTR |
s |
i |
substring(s,i,j) |
. |
j |
|
4.2.1. Неформальное описание перевода if(<expr>) <op1>else<op2>
Оператор |
Код операции |
Операнд1 |
Операнд2 |
№ |
if (<expression>) |
<expr> |
|
|
1 |
|
BF |
(1) |
Lelse |
2 |
operator1 |
<operator1> |
|
|
3 |
|
BRL |
Lend |
|
4 |
Else |
DEFL |
Lelse |
|
5 |
<operator2> |
<operator2> |
|
|
6 |
|
DEFL |
Lend |
|
7 |
if(<expr>) <op>
Оператор |
Код операции |
Операнд1 |
Операнд2 |
№ |
if (<expression>) |
<expr> |
|
|
1 |
|
BZL |
Lend |
(1) |
2 |
operator1 |
<operator1> |
|
|
3 |
|
DEFL |
Lend |
|
4 |
Оператор цикла while(<expr>)<op>
Оператор |
Код операции |
Операнд1 |
Операнд2 |
№ |
|
DEFL |
Lbegin |
|
1 |
while (<expression1>) |
<expr1> |
|
|
2 |
|
BF |
(2) |
Lend |
3 |
<operator1> |
<operator1> |
|
|
4 |
|
BRL |
Lbegin |
|
5 |
|
DEFL |
Lend |
|
6 |