Professional Documents
Culture Documents
Специфікація мови PLATO
Специфікація мови PLATO
1. Вступ
Представлена тут мова програмування PLATO – імперативна мова
загального призначення.
1.1. Завдання
Варіант 27
Арифметика: основні чотири арифметичні операції (додавання,
віднімання, ділення та множення), піднесення до степеня
(правоасоціативна операція), дужки
Особливості: унарний мінус
Інструкція повторення: for <ід>=<вираз> to <вираз> by <вираз> while
(<відношення>) <список операторів> rof;
Інструкція розгалуження: if <відношення> {<список операторів>}
1.2. Обробка
1.3. Нотація
Метасимвол Значення
= визначається як
| альтернатива
[x] 0 або 1 екземпляр х
{x} 0 або більше екземплярів х
(x | y) групування: будь-який з х або у
2xy нетермінал
zxy термінал
‘1’ термінал
“1” термінал
Приклади
c34, CHANGE_VALUE, uh, h89_78
2.2. Константи
Синтаксис
Const = IntNumber | RealNumber | BoolConst.
IntNumber = [Sign] UnsignedInt.
Real = [Sign] UnsignedReal.
Sign = '-' | '+'.
UnsignedInt = Digit {Digit}.
UnsignedReal = UnsignedInt '.' UnsignedInt.
BoolConst = true | false.
Обмеження
Кожна константа повинна мати тип, а величина константи повинна
знаходитись у дiапазонi репрезентативних значень для її типу.
На етапi лексичного аналiзу виявляються тiльки беззнаковi цiлi
константи UnsignedInt, беззнаковi дiйснi константи UnsignedReal
та логiчнi константи BoolConst.
Семантика
Кожна константа має тип, визначений її формою.
Вiзуальне представлення
Приклади
13, 0.1, 45.0, true, -457, -0.6, false
2.3. Ключові слова
Синтаксис
KeyWords = program | decl | states | integer | real | boolean | in | out
| for | to | by | while | rof | if.
2.4. Токени
З потоку символiв вхiдної програми на етапi лексичного аналiзу
виокремлюються послiдовностi символiв з певним сукупним значенням,
— токени. Списоктокенiв мови PLATO див. у табл. 2. Єдиний приклад
засвiдчує унiкальнiсть лексеми. Текст "символ . . . ", наприклад "символ
program", означає, що вказанийсимвол (symbol) є термiналом.
Код Приклади лексем Токен Неформальний опис
1 c34, uhM, h89_78 id ідентифікатор
2 34, 9, 456, intnum ціле без знаку
3 0.1, 34.98, 1.0 realnum дійсне без знаку
4 true, false boolvar логічне значення
5 program keyword символ program
6 decl keyword символ decl
7 states keyword символ states
8 integer keyword символ integer
9 real keyword символ real
10 boolean keyword символ boolean
11 in keyword символ in
12 out keyword символ out
13 for keyword символ for
14 to keyword символ to
15 by keyword символ by
16 while keyword символ while
17 rof keyword символ rof
18 if keyword символ if
19 = assign_op символ =
20 + add_op символ +
21 - add_op символ -
22 * mult_op символ *
23 / mult_op символ /
24 ^ mult_op символ ^
25 < rel_op символ <
26 <= rel_op символ <=
27 == rel_op символ ==
28 != rel_op символ !=
29 >= rel_op символ >=
30 > rel_op символ >
31 ( brackets_op символ (
32 ) brackets_op символ )
33 . punct символ .
34 , punct символ ,
35 : punct символ :
36 ; punct символ ;
37 { punct символ {
38 } punct символ }
39 /t ws пробільні символи
40 /n, /r/n eol кінець рядку
41 /0 eof кінець файлу
Табл. 2: Таблиця лексем мови PLATO
3. Типи
Мова пiдтримує значення трьох типiв: integer, real та boolean.
1. Цiлий тип integer може бути представлений оголошеною змiнною
типу integer, або константою IntNumb.
Дiапазон значень — [ -2147483648; 2147483647].
2. Дiйсний тип real може бути представлений оголошеною змiнною
типу real, або константою RealNumb.
Дiапазон значень — [3.4e−38 ; 3.4e 38 ]
3. Логiчний тип boolean може бути представлений оголошеною
змiнною типу boolean, або константою BoolConst (true або false).
Прийнято false < true.
4. Синтаксис
4.1. Вирази
Синтаксис
Вiзуальне представлення
\
Приклади
Factor: x, 12, (a + 234)
Terminal: m*z, 32/(b + 786)
ArithmExpr: -b, f1 + g, c – 24, f6^4
BoolExpr: -b == 2, (a*x + b/z) >= (k + t)
4.2. Оператори
Синтаксис
AddOp = '+' | '-'.
MultOp = '*' | '/' | '^'.
Семантика
Тип результату при застосуваннi бiнарних операторiв див. табл. 3.
Тип результату при застосуваннi унарних операторiв див. табл. 4.
Дiлення на нуль викликає помилку.
Приклад
1.234*x1/45.67, -3.4+6, 7/8, 12^5
Операто Операція Типи операндів Тип результату
р
+ додавання integer або real real,
- віднімання integer або real якщо хоча б один з
* множення integer або real операндів – real,
^ піднесення до степеню integer або real integer
/ ділення integer або real real
Синтаксис
RelOp = '==' | '<=' | '<' | '>' | '>=' | '!='.
Обмеження
Значення обох операндiв мають бути або числовими (типу integer
або real), або логiчними (типу boolean).
Результат завжди має тип boolean.
Семантика
Якщо один з операндiв має тип integer, а iнший — real, то значення
типу integer приводиться до типу real.
Приклади
5. Оголошення
Синтаксис
Declsection = decl '{' DeclareList '}'.
DeclareLlist = { Declaration ';' }.
Declaration = Type Identificator.
Type = integer | real | boolean.
Опис
Оголошення (декларацiя) специфiкує набiр iдентифiкаторiв, якi
можуть бути використанi у програмi.
Оголошення iдентифiкатор означає оголошення змiнної.
Обмеження
Роздiл оголошень знаходиться перед роздiлом iнструкцiй.
Кожен iдентифiкатор має бути оголошений i тiльки один раз.
Семантика
Оголошення змiнної означає видiлення пам’ятi для зберiгання
значення декларованого типу.
Значення оголошеної змiнної залишається невизначеним аж до
присвоєння їй значення у iнструкцiї присвоєння або введення.
Область видимостi змiнної (scope) — вся програма.
Вiзуальне представлення
Приклад
decl {
integer a;
boolean J;
real u_g8host;
}
6. Розділ інструкцій
Синтаксис
Statesection ='{' StatementsList '}'.
StatementsList = Statement ';' {Statement ';'}
Statement = Assign | In | Out | ForStatement | IfStatement
Опис
Iнструкцiї (statements) визначають алгоритмiчнi дiї, якi мають бути
виконанi у програмi.
Обмеження
У роздiлi iнструкцiй має бути не менше однiєї iнструкцiї.
Семантика
Iнструкцiї виконуюються послiдовно у порядку запису (оскiльки
мова не мiстить операторiв перехду).
Вiзуальне представлення
Приклад
states {
a = 7;
u_g8host = a / 3;
}
6.1. Оператор (iнструкцiя) присвоювання
Синтаксис
Assign = Identificator AssignOp Expression.
Опис
Значення, якi можуть використовуватись у лiвiй та правiй
частинах iнструкцiї присвоювання називають l-значенням та r-
значенням (або lvalue та rvalue, або left-value та right-value).
Обмеження
Тип змiнної з iдентифiкатором Identificator повинен збiгатись з
типом r-значення.
Семантика
l-значення має тип вказiвника на мiсце зберiгання значення
змiнної з iдентифiкатором Ident.
r-значення має тип значення, обчисленого за виразом Expression.
Вiзуальне представлення
Приклад
f5 = 3/4+1.23, b7 = 2+3 < 7 ^ 5
6.2. Iнструкцiя введення
Синтаксис
In = in '(' Identificator {',' Identificator} ')'.
Опис
Значення вводяться з клавiатури.
Введення кожного окремого значення пiдтверджується клавiшею
Enter.
Обмеження
Вiдмiннiсть типу введеного значення вiд типу змiнної викликає
помилку.
Вiзуальне представлення
Приклад
in(a1,v2,len7) .
6.3. Iнструкцiя виведення
Синтаксис
Out = out '(' Identificator {',' Identificator} ')'.
Опис
Всi значення списку виводяться у один рядок консолi.
Кожне значення виводиться у форматi \tIdent=значення.
Обмеження
Виведення змiнної з невизначеним значенням викликає помилку.
Вiзуальне представлення
Синтаксичну дiаграму див. на рис. 1.
Приклад
out(c,x1,f5)
Рис. 1: Iнструкцiя виведення
6.4. Оператор циклу (iнструкцiя повторення)
Синтаксис
ForStatement = for ForAssign to Last by Step while '(' Condition ')'
OpList rof ';'.
ForAssign = Id AssignOp Start.
Id = NumberType Identificator.
NumberType = integer | real.
Condition = BoolExpression.
Start = ArithmExpression.
Last = ArithmExpression.
Step = ArithmExpression.
Опис
Тiло оператора циклу OpList виконується один або бiльше разiв..
Семантика
Перед першою ітерацією Id присвоюється значення Start, перед
наступними ітерацією виконується Id = Id + Step.
Перевіряється умова Id < Last. Якщо умова не виконується, то
цикл завершується.
Перевіряється Condition. Якщо умова не виконується, то цикл
завершується.
Виконується OpList.
Вiзуальне представлення
Приклад
for real i = 0.1 to 0.9 by 0.1 while ((i + 1.2) 2 != 1 ) {
out(i);
}
6.5. Оператор розгалудження
Синтаксис
IfStatement = if Condition OpList.
Опис
Тіло оператору OpList виконується 0 або 1 раз.
Обмеження
Значення Condition має тип boolean,
Семантика
OpList виконується, якщо значення Condition визначається як true.
Вiзуальне представлення
Синтаксичнi дiаграми див. на рис. 8.
7. Програма
Синтаксис
Program = program ProgName '{' Declsection Statesection '}'.
ProgName = Identificator
Опис
Кожна програма починається з термiнала program, iдентифiкатора
програми символа '{'; за iдентифiкатором програми — (єдиний)
роздiл оголошень; далi — (єдиний) роздiл iнструкцiй. Програма
закінчується символом '}'.
Iдентифiкатор програми нiяк не використовується у програмi.
Вiзуальне представлення
Синтаксичну дiаграму див. на рис. 9.
Приклад
program Counter {
decl {
integer a;
integer b;
real g;
}
states {
in(g);
for integer i = 0 to 11 by 1 while (i != 5) {
if(i < 5) {
a = (-i);
}
If(I > 5) {
a = i;
}
b = b + a ^ g ^ (a * g);
}
out(b);
}
}