проміжної мови
Для бінарних операцій зручною формою представлення програми після синтаксичного аналізу є тетради.
Формат тетрад:
<код операції>, <операнд_1>, <операнд_2>, <результат>,
де <операнд_1> і <операнд_2> специфікують аргументи, а <результат>- Тимчасове ім'я для зберігання результату виконання операції (змінна з робочої області).
Як операнди тетрад поряд зі змінними і константами, визначеними у вихідній програмі, можуть виступати результати раніше виконаних тетрад. Наприклад, вираз a * b + с * d представляється у вигляді послідовності наступних тетрад:
*, a, b, t1
*, c, d, t2
+, t1, t2, t3
Послідовність тетрад являє собою програму, інструкції якій обробляються послідовно. Операнди однієї тетради повинні бути однакового типу. Для перетворення типу операнда можна використовувати тетради перетворення типу з кодами операцій ITOS (цілий - в строкоий) і STOI (строковий - в цілий). Оскільки операція перетворення типу одномісна, вона записується з порожнім другим операндом, наприклад, STOI, а, t.
Для представлення Унарні мінуса в тетрадах також можна не використовувати другий операнд. Тетрада -, а, t інтерпретується як присвоєння тимчасової змінної t значення - а.
Тетради зручно використовувати для виконання машинно-незалежної оптимізації, зокрема, виключення зайвих операцій. Основним недоліком тетрад є великий обсяг пам'яті, необхідний для їх зберігання. Незважаючи на те, що в багатьох тетрадах є вільні поля, результат виконання операції завжди записується в четверте поле.
Внутрішнє подання тетради - запис, що складається з чотирьох лексем. При цьому коди операцій тетрад, порожні поля, номера тетрад і тимчасові змінні ti є лексемами спеціального типу.
синтаксис лексема аналізатор мову
Опис тетрадСинтаксисСемантикаКопОп1Оп2Рез BRLLБезусловний перехід на мітку LBFLRПереход на мітку L, якщо R=«Брехня» DEFLLОпределеніе мітки LWRTAВивод значення А на екранREDAЗапрос на введення з клавіатури значення змінної ACRLFВозврат каретки і переклад строкіSETARНазначает тип A для змінної RCHTPABRПреобразует тип виразу A до типу B=IABRоперація «дорівнює» для цілих значень A і B=CABRоперація «дорівнює» для символьних значень A і B IABRоперація «більше» для цілих значень A і B < ;=IABRоперація «менше одно» для цілих значень A і B>=IABRоперація «більше одно» для цілих значень A і B <> IABRоперація «нерівно» для цілих значень A і B <> CABRоперація «нерівно» для символьних значень A і B:=BAA:=B + IABRR:=A + B-IABRR:=A - B * IABRR:=A * B / IABRR:=A / BORABRR:=A or BANDABRR:=A and B-IARR:= - ANOTARR:=not ALENARОпределеніе довжини строкіCNCABRКонкатенація строкPOSABRПоіск підрядка в строкеSTCHABRВозврат з рядка A символу з номером BSTOIARПреобразует рядок A в ціле чіслоITOSARПреобразует ціле число A в строкуSMEABRСравненіе двох рядків