Skip to content

Структура дерева

MikhailTerekhov edited this page Oct 19, 2017 · 1 revision

Единица трансляции – последовательность определений функций или определений переменных до конца файла

Определение функции

Funcdef, identref, maxdispl, составной оператор

// латинскими буквами обозначаются названия узлов дерева

// identref – ссылка на таблицу идентификаторов

Определение переменной

Declarr, N, N выражений, если переменная или в ее структуре есть массив
Declid, displ, type_elem, N, all, iniproc, дальше м.б. инициализатор

// displ – смещение переменной-массива

// type_elem – тип переменной или тип элемента, если это массив

// N – размерность, N == 0, значит, скаляр all == 0, то выражения инициализации нет

// Инициализатор скаляра – просто выражение, а инициализатор массива – all выражений
// iniproc – адрес инициализирующей процедуры

Выражение

Последовательность Выражений с присваиванием

Выражение с присваиванием

Линейная обратная польская запись из идентификаторов, констант, вырезок, вызовов, унарных и бинарных операций, TExprend

Условное выражение

Выражение-условие, Condexpr, thenref, elseref, выражение-then, выражение-else или снова выражение условие и Condexpr

Если выражение-then имеет тип int, то за ним следует узел NOP, который в процессе генерации кода может исчезнуть, а может замениться на WIDEN

Составной оператор

Begin, последовательность определений переменных и операторов, End

Условный оператор

If, thenref, elseref, выражение-условие, оператор-then, оператор-else

// если elseref == 0, оператора-else нет

Цикл While

While, doref, выражение-условие, оператор

Цикл Do

Do, condref, оператор, выражение-условие

Цикл For

For, fromref, condref, incrref, stmtref, выражение-from, выражение-cond, выражение-incr, оператор

// если какая-то ссылка == 0, соответствующей части нет

Оператор выбора

Switch, выражение-условие, оператор

// все типы меток представляются отдельными узлами дерева

Метка

Label, identref

Метка Case

Case, Выражение

Метка default

Default

Оператор break

Break

Оператор continue

Continue

Оператор return

Returnvoid

Оператор return со значением

Returnvalue, L, выражение-значение
L – количество слов в значении

Оператор goto

Goto, identref

Идентификатор

Ident, identref

Константа

Const, num

// num – параметр, в котором целая константа

Constd, num1, num2

// num1 и num2 – параметры, в которых вещественная константа

Константа строка

String, затем 0, 1 или много литер, затем 0

Вырезка

Sliceident, identref, Выражение-индекс или Slice, type_elem, Выражение-индекс

// type_elem – тип элемента

Вызов

Call1, N, выражения-параметры, Call2, – identref

// N – количество параметров

// Widen и Widen1 – это обычные унарные постоперации

Печать

Print, type

Печать значения идентификатора

Printid, identref

Ввод значения идентификатора

Getid, identref

Запуск мотора

Setmotor

Приостановка

Sleep

Снять показания аналогового датчика

Getansensor

Снять показания цифрового датчика

Getdigsensor