ЛР-1 / ЯП №1
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР) Кафедра безопасности информационных систем (БИС)
АНАЛИЗ ЗАДАЧИ. АБСТРАКЦИЯ ПРОГРАММ И ДАННЫХ. СИНТАКСИС ЯЗЫКА ПРОГРАММИРОВАНИЯ
Отчет по лабораторной работе №1 по дисциплине «Языки программирования»
Студент гр.
_______
_______
Принял:
Доцент каф. КИБЭВС,
д.т.н., доцент
_______ Романов А. С.
_______
Томск 2026
|
Оглавление |
Введение................................................................................................................... |
3 |
Ход работы............................................................................................................... |
4 |
Заключение .............................................................................................................. |
6 |
2
Введение
Цель работы – знакомство с основными элементами языка программирования, расширенной формой записи Бэкуса-Наура для записи синтаксиса языка программирования.
Для работы был выдан 19 вариант: Система управления уличным освещением на основе датчиков освещенности.
3
Ход работы
В ходе работы была сделана декомпозиция программы (рисунок 1.1),
описаны основные модули (таблица 1.1), их входные и выходные данные,
определены возможные ошибки. Был написан простейший синтаксис языка с помощью расширенной формы Бэкуса-Наура и приведен пример программы.
Таблица 1.1 – Описание модулей
Модуль |
Назначение |
|
Входные данные |
Выходны |
Ошибки |
|
|
|
|
|
|
е данные |
|
|
|
|
|
|
|
|
Модуль 1 |
Опрос датчиков |
и |
raw_signal |
lux_value |
Потеря сигнала, |
|
|
|
|||||
|
фильтрация шумов. |
|
Int(0...1023) |
Float(0.0... |
значение < 0 |
|
|
|
|
|
|
10000.0) |
|
|
|
|
|
|
|
|
Модуль 2 |
Хранение |
пороговых |
new_threshold |
active_thr |
Некорректный |
|
|
eshold |
|||||
|
значений. |
|
|
Float(10.0...500.0) |
формат данных |
|
|
|
|
|
|||
|
|
|
|
|
Float(10.0. |
|
|
|
|
|
|
..500.0) |
|
|
|
|
|
|
|
|
Модуль 3 |
Логика |
принятия |
lux, threshold |
power_per |
Ошибка |
|
|
cent |
|||||
|
решения. |
|
|
Float(0.0...10000.0) |
вычисления, |
|
|
|
|
|
|||
|
|
|
|
|
Int(0...100 |
переполнение |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
Модуль 4 |
Управление |
|
|
power_percent |
pwm_sign |
Тайм-аут |
|
|
|
al |
|||
|
исполнительными |
|
Int(0...100) |
устройства, |
||
|
|
|
||||
|
устройствами. |
|
|
Int(0...255 |
перегрузка |
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
Модуль 5 |
Журналирование |
|
event_msg |
log_status |
Память |
|
|
|
|
||||
|
событий. |
|
|
String[128] |
Bool(True |
заполнена, |
|
|
|
|
|
/False) |
ошибка записи |
|
|
|
|
|
|
|
Модуль 6 |
Диагностика |
|
current_state |
error_code |
Ошибка |
|
|
|
|
||||
|
исправности. |
|
Status |
Int(0...255 |
самодиагности |
|
|
|
|
|
|
) |
ки |
|
|
|
|
|
|
|
4
Синтаксис:
program ::= 'SYSTEM', white_space, identifier, white_space, "{", white_space,
{ statement, white_space }, "}".
statement ::= ( assignment | control_flow | method_call | db_operation ), ";" . assignment ::= identifier, white_space, ":=", white_space, expression . control_flow ::= 'IF', white_space, comparison, white_space,
'THEN', white_space, method_call .
comparison ::= expression, white_space, ( "<" | ">" | "==" ), white_space, expression .
method_call ::= identifier, "(", [ arguments ], ")" . arguments ::= expression, { ",", white_space, expression } . expression ::= identifier | number | method_call .
db_operation ::= "DATABASE", ".", ("SAVE" | "LOAD" | "CONNECT"), "(", [ arguments ], ")" .
identifier ::= letter, { letter | digit } . number ::= digit, { digit } [ ".", { digit } ] .
letter ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"|"a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k” | "l" | "m” | "n" | "o"
| "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" . digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" . bool ::= "True" | "False" .
white_space ::= ? символы пробела и переноса строки ? .
Пример программы: SYSTEM StreetLightController
{
THRESHOLD := 200.0;
5
CURRENT_LUX := ReadSensor();
IF CURRENT_LUX < THRESHOLD THEN
SetLampPower(100);
IF CURRENT_LUX > THRESHOLD THEN
SetLampPower(0);
}
Рисунок 1.1 – Декомпозиция
6
Заключение
Проведен анализ программы под вариантом 19, выполнена декомпозиция, разработан синтаксис языка программирования и записан в форме РБНФ, приведен пример программы, реализующий основной функционал.
7
