Интерпретатор Little C

advertisement
С ОДЕР ЖАНИЕ
1
Введение
5
2
Иформационный поиск
6
3
Разработка технического задания
…………………
0
1
4
Анализ технического задания и разработка концептуальной модели 2
……..………
1
5
Разработка логической модели ………………………………….
9
6
Описание программы ……………………………………
2
7
Разработка
тестового
примера 1
……………………………………………………….
2
3
Безопасность
и
экологичность
проекта 4
………………………………………………
10.1. Анализ
опасных
и
4
вредных
производственных 4
факторов…………………………..
10.2. Защита
от
8
электромагнитных
полей 4
………………………………………………...
10.3. Организация
рабочего
места
согласно
8
эргономическим 5
требованиям ……………
10.4. Показатели
аэроионного
1
состава
воздуха 5
…………………………………………...
10.5. Пожарная
8
безопасность 5
………………………….…………………………………....
8
Заключение
……………………………………………………………………………
.
8
Введение. Постановка задачи.
Информационный поиск.
1)Функционально близкие объекты
а)язык Little C
б)язык Mini C++
2) Анализ алгоритмов работы функционально близких объектов
Количество зарезервированных слов языка С невелико, однако это
богатый и мощный язык.
Интерпретатор
Little
C
(Малый
С)
предназначен
для
интерпретации довольно узкого подмножества С, включающего, тем не
менее, многие важные средства языка. При определении конкретного
состава подмножества языка Little С использовались два главных
критерия:

Неотделимо ли данное средство от языка?

Необходимо ли оно для демонстрации важных аспектов языка?
Например, такие средства, как рекурсивные функции, глобальные и
локальные переменные удовлетворяют обоим критериям. Интерпретатор
Little С поддерживает все три вида циклов (наличие всех их, конечно, не
обязательно в соответствии с первым критерием, но необходимо в
соответствии со вторым критерием). Однако оператор switch не
включен в интерпретатор, потому что он не является обязательным (он
красив, но не необходим) и не иллюстрирует ничего такого, что нельзя
было бы проиллюстрировать с помощью оператора if (который включен
в интерпретатор).
Исходя из этих соображений, в интерпретатор Little С включены
следующие средства языка:

Параметризованные функции с локальными переменными

Рекурсия

Оператор if

Циклы do-while, while и for

Локальные и глобальные переменные типов int и char

Параметры функций типов int и char

Целые и символьные константы

Строковые константы (ограниченная реализация)

Оператор return (как со значением, так и без него)

Ограниченный набор стандартных библиотечных функций

Операторы +, -, *, /, %, <, >, <=, >=, ==, !=, унарный -, унарный +

Функции, возвращающие целое значение

Комментарии вида /*...*/
Ограничение языка Little C
В грамматику Little С введены некоторые ограничения. Первое
ограничение заключается в том, что телом операторов if, while, do и for
может быть только блок, заключенный в фигурные скобки. Если телом
является единственный оператор, он также должен быть заключен в
фигурные скобки. Например, интерпретатор Little С не сможет
правильно обработать следующий фрагмент программы:
for(a=0; a<10; a=a+1)
for(b=0; b<10; b-b+1)
for(c=0; с<10; с=с+1)
puts("привет");
if (...)
if (...) х = 10;
Этот фрагмент должен быть написан так:
for(a=0; a<10; a=a+1) {
for(b=0; b<10; b-b+1) {
for(c=0; с<10; с=с+1) {
puts("привет");
}
}
}
if (...) {
if (...) {
х = 10;
}
}
Благодаря этому ограничению интерпретатору легче найти конец
участка
программы,
составляющего
тело
одного
из
операторов
управления программой. Другое ограничение заключается в том, что не
поддерживаются прототипы функций. Предполагается, что все функции
возвращают тип int, разрешен возвращаемый тип char, но он
преобразуется в int. Проверка правильности типа параметра не
выполняется.
Все локальные переменные должны быть объявлены в самом
начале функции, сразу после открывающейся фигурной скобки.
Локальные переменные не могут быть объявлены внутри какого-либо
блока. Поэтому следующая функция в языке Little С является
неправильной:
int myfunc()
{
int i; /* это допустимо */
if(1) {
int i; /* в языке Little С это не допустимо */
}
}
Здесь объявление переменной i внутри блока if для интерпретатора
Little С является недопустимым. Требование объявления локальных
переменных только в начале функции немного упрощает реализацию
интерпретатора.
И, наконец, последнее ограничение: определение каждой функции
должно
начинаться
с
зарезервированного
слова
char
или
int.
Следовательно, интерпретатор Little С не поддерживает традиционное
правило "int по умолчанию". Таким образом, следующее объявление
является правильным:
int main()
{
/* ... */
}
однако следующее объявление в языке Little С неправильное:
main()
{
/* ... */
}
Определение значения выражения
Интерпретатор Little С поддерживает следующие операции: +, -, *, /, %,
=, операторы сравнения (<, = =, > и так далее) и скобки. В языке Little С
выражения определяются с помощью следующих порождающих правил:
выражение
-> [присваивание]
[значение_переменной]
присваивание
-> именующее_выражение =
значение_переменной
именующее_выражение -> переменная
значение_переменной -> часть [оператор_сравнения
часть]
часть
-> терм [+терм] [-терм]
терм
-> множитель [*множитель]
[/множитель] [%множитель]
множитель
-> [+ или -] атом
атом
-> переменная, константа,
функция, или(выражение)
Здесь термин оператор_сравнения может обозначать любой из
операторов сравнения. Термины именующее_выражение и
значение_переменной означают объекты в левой и правой частях
оператора присваивания. Старшинство оператора определяется
порождающим правилом. Чем выше старшинство оператора, тем ниже в
списке операторов он расположен.
Рассмотрим применение порождающих правил на примере вычисления
выражения
count = 10 - 5 * 3;
Сначала применяется правило 1, разделяющее выражение на три части:
count
=
10-5*3
^
^
^
|
|
|
именующее_выражение
присваивание
значение_переменной
Поскольку значение нетерминала значение_переменной не содержит
операторов сравнения, то оно может быть сгенерировано в результате
применения порождающего правила для нетерминала терм:
10
-
5*3
^
^
^
|
|
|
терм
минус
терм
Несомненно, второй терм составлен из двух множителей: 5 и 3. Эти два
множителя являются константами, они порождаются с помощью
порождающих правил более низкого уровня.
Теперь, чтобы вычислить значение выражения, будем двигаться, следуя
порождающим правилам, в обратном направлении. Сначала выполняется
умножение 5*3, что дает 15. Потом это значение вычитается из 10,
получается -5. И, наконец, последний шаг — присваивание этого
значения переменной count, оно же является значением всего
выражения.
Синтаксический анализатор выражений.
В рассматриваемом интерпретаторе Little С используется рекурсивный
нисходящий синтаксический анализатор.Рекурсивный нисходящий
синтаксический анализатор представляет собой набор взаимно
рекурсивных функций, обрабатывающих выражение.
Синтаксический разбор исходного текста программы.
Специальная функция, читающая исходный текст программы и
возвращающая очередную логическую единицу, является
фундаментальной частью каждого интерпретатора и компилятора.
Исторически сложившееся название такой логической единицы —
лексема. Во всех языках программирования (в том числе и в языке С)
программа рассматривается как последовательность лексем. Другими
словами, лексема — это неделимая единица программы. Например,
оператор равенства = = является лексемой. Эти два знака равенства
нельзя разделить, не изменив кардинальным образом их значение.
Аналогично, if — также лексема. Ни "i", ни "f" сами по себе не имеют в
программе на С никакого значения.
В языке С каждая лексема принадлежит одной из следующих категорий:
зарезервированные слова идентификаторы константы
строки
операторы
знаки пунктуации
Зарезервированные слова — это лексемы, составляющие язык С; к ним
относится, например, while. Идентификаторы — это имена
переменных, функций и типов, определенных пользователем (в Little С
не реализованы). Знаки пунктуации — это некоторые символы, такие как
точка с запятой, запятая, различные скобки и т.п. В зависимости от
контекста, некоторые из этих символов, могут быть операторами.
Приведем пример разбиения на лексемы при разборе оператора слева
направо. Оператор
for(x=0; x<10; x=x+1) printf("алло %d", x);
состоит из следующих лексем:
Лексема
for
Категория
зарезервированное слово
(
знак пунктуации
x
идентификатор
=
оператор
0
константа
;
знак пунктуации
x
идентификатор
<
оператор
10
константа
;
знак пунктуации
x
идентификатор
=
оператор
x
идентификатор
+
оператор
1
константа
)
знак пунктуации
printf
(
идентификатор
знак пунктуации
"алло %d"
строка
,
знак пунктуации
x
идентификатор
)
знак пунктуации
;
знак пунктуации
В интерпретаторе Little С определяются следующие категории лексем:
Тип лексемы
delimiter (разделитель)
Включает
знаки пунктуации и операторы
keyword (зарезервированное слово) зарезервированные слова
string (строка)
identifier (идентификатор)
number (число)
block (блок)
строки, заключенные в двойные кавычки
имена переменных и функций
числовая константа
{ или }
Основные функциисинтаксияеского анализатора языка Little С
Функция get_token() выделяет лексемы из исходного текста
программы Little С и возвращает их в качестве своего значения. Функция
get_token() начинает работу с удаления пробелов и символов
перевода строки. Так как никакая лексема языка С (кроме строковой
константы) не содержит пробелов, их нужно пропустить. Функция
get_token() пропускает также комментарии (в Little С допускаются
только комментарии вида /*...*/). После этого строка, представляющая
каждую лексему, помещается в token и ее тип (определенный в
перечислении tok_types) записывается в token_type. Если лексема
представляет собой зарезервированное слово, то его внутреннее
представление присваивается tok с помощью функции
look_up(),если синтаксический анализатор находит синтаксическую
ошибку, то он вызывает функцию sntx_err() со значением
перечислимого типа, соответствующим типу найденной ошибки.
Интерпретатор Little C
Работа по интерпретации программы на С может быть выражена
следующим простым алгоритмом:
while (есть_лексемы_во_входном_потоке) {
читать следующую лексему;
выполнить соответствующее действие;
}
Нужно иметь в виду следующее: шаг "выполнить соответствующее
действие" может содержать чтение дополнительных лексем из входного
потока. Для лучшего понимания этого алгоритма мысленно выполним
интерпретацию следующего фрагмента программы:
int a;
a = 10;
if(a < 100) printf("%d", a);
Согласно алгоритму, прочтем первую лексему int. Эта лексема
указывает на то, что следующим действием должно быть чтение
следующей лексемы для того, чтобы узнать, как называется переменная
(a), которую нужно объявить и для которой нужно выделить область
памяти. Следующая лексема (точка с запятой) заканчивает строку.
Соответствующее действие — проигнорировать ее. Далее, начинаем
следующую итерацию алгоритма и считываем следующую лексему, это а
из второй строки. Строка не начинается с зарезервированного слова,
следовательно, это выражение языка С. Поэтому соответствующим
действием является применение синтаксического анализатора
выражений для вычисления значения выражения. Этот процесс "съедает"
все лексемы во второй строке. Наконец, читаем лексему if. Она
указывает на то, что начинается оператор if. Соответствующее действие
— выполнить его. Аналогичный процесс выполняется многократно, пока
не будет считана последняя лексема программы.
Интерпретатор Little C
В этом разделе рассматривается наиболее важная часть интерпретатора
Little С. Перед тем как приступить к подробному чтению текста
программы интерпретатора, нужно понять, как вообще работает
интерпретатор. Понять программу интерпретатора в некотором смысле
легче, чем программу синтаксического анализатора выражений, потому
что работа по интерпретации программы на С может быть выражена
следующим простым алгоритмом:
while (есть_лексемы_во_входном_потоке) {
читать следующую лексему;
выполнить соответствующее действие;
}
Этот алгоритм может показаться невероятно простым по сравнению с
синтаксическим анализатором выражений, но это именно то, что делает
интерпретатор. Нужно только иметь в виду следующее: шаг "выполнить
соответствующее действие" может содержать чтение дополнительных
лексем из входного потока. Для лучшего понимания этого алгоритма
мысленно выполним интерпретацию следующего фрагмента программы:
int a;
a = 10;
if(a < 100) printf("%d", a);
Согласно алгоритму, прочтем первую лексему int. Эта лексема
указывает на то, что следующим действием должно быть чтение
следующей лексемы для того, чтобы узнать, как называется переменная
(a), которую нужно объявить и для которой нужно выделить область
памяти. Следующая лексема (точка с запятой) заканчивает строку.
Соответствующее действие — проигнорировать ее. Далее, начинаем
следующую итерацию алгоритма и считываем следующую лексему, это а
из второй строки. Строка не начинается с зарезервированного слова,
следовательно, это выражение языка С. Поэтому соответствующим
действием является применение синтаксического анализатора
выражений для вычисления значения выражения. Этот процесс "съедает"
все лексемы во второй строке. Наконец, читаем лексему if. Она
указывает на то, что начинается оператор if. Соответствующее действие
— выполнить его. Аналогичный процесс выполняется многократно, пока
не будет считана последняя лексема программы. Это относится к любой
программе на С. Пользуясь этим алгоритмом, приступим к созданию
интерпретатора.
Предварительный проход интерпретатора
Перед тем как интерпретатор начнет выполнять программу, должны быть
выполнены некоторые процедуры. Характерной чертой языков,
предназначенных больше для интерпретации, чем для компиляции,
является то, что выполнение программы начинается в начале текста
программы и заканчивается в его конце. Так выполняются программы,
написанные на старых версиях языка BASIC. Это, однако, не относится к
языку С по трем основным причинам.
Во-первых, все программы на С начинают выполняться с функции
main(). Вовсе не обязательно, чтобы эта функция была первой в
программе. Поэтому интерпретатор, чтобы начать выполнение с нее,
должен еще до начала выполнения программы узнать, где она находится.
Следовательно, должен быть реализован некоторый метод, позволяющий
начать выполнение программы с нужной точки. (Глобальные
переменные также могут предшествовать функции main(), поэтому,
даже если она является первой функцией программы, все равно и в этом
случае она не начинается с первой строки.)
Во-вторых, все глобатьные переменные должны быть известны перед
началом выполнения main(). Операторы объявления глобальных
переменных никогда не выполняются интерпретатором, потому что они
находятся вне всех функций.
В-третьих, для повышения скорости выполнения необходимо знать, где
в программе расположена каждая функция; это позволит вызывать ее как
можно быстрее. Если это условие не будет выполнено, то при каждом
вызове функции понадобится длительный последовательный поиск этой
функции в тексте программы.
Эти проблемы решаются с помощью предварительного прохода
интерпретатора. Программа предварительного прохода читает исходный
текст программы перед ее выполнением и делает все, что нужно сделать
до выполнения. В интерпретаторе Little С она выполняет две важные
задачи: во-первых, находит и запоминает положение всех
пользовательских функций, включая main(), и во-вторых, находит все
глобальные переменные и определяет область их видимости. В
интерпретаторе Little С предварительный проход выполняет функция
prescan().Функция prescan() работает следующим образом.
Каждый раз, когда встречается открывающаяся фигурная скобка,
переменная brace увеличивается на 1, а когда закрывающаяся —
уменьшается на 1. Следовательно, если brace больше нуля, то текущая
лексема находится внутри функции. Поэтому объявление переменной
считается глобальным, если оно встретилось, когда brace равно нулю.
Аналогично, если при brace, равном нулю, встретилось имя функции,
значит, оно принадлежит определению функции (в Little С нет
прототипов функций).
Функция interp_block()
Если не считать вызовов функции exit() или подобных ей, то
интерпретация программы, написанной на языке С, кончается в одном из
следующих случаев: встретилась последняя закрывающаяся фигурная
скобка функции main(), или встретился оператор return из main().
Из-за того, что при встрече последней закрывающейся фигурной скобки
main() программу нужно завершить, interp_block() выполняет
только один оператор или блок, а не всю программу, хоть она и состоит
из блоков. Таким образом, interp_block() вызывается каждый раз,
когда встречается новый блок. Это относится не только к блокам
функций, но и к блокам операторов (например, if). Следовательно, в
процессе выполнения программы интерпретатор Little С вызывает
interp_block() рекурсивно.
Функция interp_block() работает следующим образом. Сначала из
входного потока считывается очередная лексема программы. Если это
точка с запятой, то выполняется единственный оператор и функция
возвращает управление. В противном случае, выполняется проверка,
является ли следующая лексема идентификатором; если да, то оператор
является выражением и вызывается синтаксический анализатор
выражений. Синтаксический анализатор должен прочесть все
выражение, включая первую лексему, поэтому перед его вызовом
функция putback() возвращает последнюю прочитанную лексему во
входной поток. После возврата управления из eval_exp() token
содержит последнюю лексему, прочитанную синтаксическим
анализатором выражений. Если синтаксических ошибок нет, то это
должна быть точка с запятой. Если token не содержит точку с запятой,
то выводится сообщение об ошибке.
Если очередная лексема программы является открывающейся фигурной
скобкой, то переменная block устанавливается равной 1, а если
закрывающейся, то interp_block() возвращает управление
вызвавшей программе.
Обработка локальных переменных
Когда интерпретатор встречает зарезервированные слова int или char,
он вызывает функцию decl_local(), которая размещает локальные
переменные. Функция decl_local() сначала считывает тип
объявленной переменной (или переменных) и инициализирует
переменные нулями. Затем в цикле считывается список
идентификаторов, разделенных запятыми. При каждой итерации цикла
информация об очередной переменной заносится в стек локальных
переменных. В конце функции decl_local() проверяется, является ли
последняя лексема точкой с запятой.
При выполнении программы интерпретатор не может встретить
объявление глобальной переменной, потому что выполняется только код
программы, записанный внутри функций. Следовательно, если
встретилось объявление переменной, то это локальная переменная. В
структурированных языках локальные переменные хранятся в стеке. В
интерпретаторе Little С стек для локальных переменных хранится в
массиве local_var_stack. Каждый раз, когда встречается локальная
переменная, ее имя, тип и значение (первоначально равное нулю)
заносятся в стек при помощи функции local_push(). Глобальная
переменная lvartos является указателем стека. (Соответствующей
функции извлечения из стека нет. Вместо этого стек локальных
переменных переустанавливается каждый раз при возврате управления
из функции local_push().
Вызов функций, определенных пользователем
Все вызовы функций (кроме main()) осуществляются в синтаксическом
анализаторе выражений из функции atom() с помощью вызова функции
call(). Именно функция call() выполняет все необходимые при
вызове функций действия.
В первую очередь с помощью вызова функции find_func() функция
call() находит адрес точки входа вызываемой функции в исходном
тексте программы. Затем эта функция сохраняет текущее значение
lvartos индекса стека локальных переменных в переменной
lvartemp. Потом она вызывает функцию get_args(), которая
обрабатывает все аргументы функции. Функция get_args() считывает
список выражений, разделенных запятыми, и заносит их в стек
локальных переменных в обратном порядке. (Обратный порядок
занесения переменных применяется потому, что так их легче
сопоставлять с соответствующими параметрами.) Значения переменных,
записанные в стек, не имеют имен (стек — это всего лишь массив).
Имена параметров даются им функцией get_params().
После обработки аргументов функции текущее значение указателя prog
сохраняется в temp. Эта переменная указывает на точку возврата
функции. После этого значение lvartemp заносится в стек вызова
функций. Доступ к этому стеку осуществляется с помощью функций
func_push() и func_pop(). В данный стек при каждом вызове
функции записывается значение lvartos. Значение lvartos
представляет собой начальную точку в стеке локальных переменных для
переменных (и параметров) вызванной функции. Значение на вершине
стека вызова функций используется для предотвращения доступа
функции к переменным, которые в ней не объявлены.
Следующие две строки функции call() устанавливают указатель
программы на начало функции и затем, вызывая функцию
get_params(), устанавливают соответствие между формальными
параметрами и значениями аргументов функции, которые уже находятся
в стеке локальных переменных. Фактическое выполнение функции
осуществляется вызовом interp_block(). После возврата управления
из interp_block() указатель программы prog переустанавливается;
он будет указывать на точку возврата, а индекс стека локальных
переменных получит значение, которое он имел до вызова функции. На
этом последнем шаге из стека фактически удаляются все локальные
переменные функции.
Если вызванная функция содержит оператор return, то
interp_block() перед возвратом в call() вызывает func_ret(),
которая вычисляет возвращаемое значение.
Обработка цикла while
Функция exec_while() работает следующим образом. Сначала
лексема while возвращается во входной поток, а ее адрес сохраняется в
переменной temp. Этот адрес будет использован интерпретатором,
чтобы возвратиться к началу цикла (т.е. начать следующую итерацию с
начала цикла while). Далее лексема while считывается заново для
того, чтобы удалить ее из входного потока. После этого вызывается
функция eval_exp(), которая вычисляет значение условного
выражения цикла while. Если условие выполнено (т.е. условное
выражение принимает значение ИСТИНА), то рекурсивно вызывается
функция interp_block(), которая интерпретирует блок while.
После возврата управления из interp_block() программный
указатель prog устанавливается на начало цикла while и управление
передается функции interp_block(), в которой весь процесс
повторяется. Если условное выражение оператора while принимает
значение ЛОЖЬ, то происходит поиск конца блока while, а затем выход
из функции exec_while().
Обработка цикла do-while
Главное отличие цикла do-while от цикла while состоит в том, что
блок do-while выполняется всегда как минимум один раз, потому что
его условное выражение находится после тела цикла. Поэтому exec_do
сначала запоминает адрес начала цикла в переменной temp, а затем
рекурсивно вызывает interp_block(), которая интерпретирует блок,
ассоциированный с циклом. После возврата управления из
interp_block() идет поиск соответствующего слова while и
вычисляется значение условного выражения. Если условие выполнено,
то prog устанавливается так, что его значение указывает на начало
цикла, в противном случае выполнение продолжается со следующего
оператора.
Цикл for
Сначала функция обрабатывает инициализирующее выражение цикла
for. Часть инициализации for выполняется только один раз; эта часть
не подвергается циклической обработке. Затем указатель программы
устанавливается так, чтобы он указывал на символ, следующий сразу
после той точки с запятой, которой заканчивается часть инициализации.
Наконец, после этого значение указателя присваивается переменной
temp. А затем организовывается цикл, в котором проверяется условная
часть цикла for и переменной temp2 присваивается адрес начала части
приращения. Далее производится поиск начала тела цикла и его (тела)
интерпретация, если условное выражение принимает значение ИСТИНА.
(В противном случае производится поиск конца тела цикла и выполнение
продолжается с оператора, следующего после цикла for.) После
рекурсивного вызова interp_block() выполняется часть
приращения, после чего весь процесс повторяется.
Алгоритм работы языка Mini C++ такой же как у Little C.
Обзор литературы
1) «Герберт Шилдт. Полный справочник по С (4-ое издание)»
2) «Герберт Шилдт. Искусство программирования на С++»
3) «Гласс Г., Эйблс К. UNIX для программистов и пользователей»
4) http://www.realcoding.net/articles/chast-vii-interpretatory-yazyka.html
Постановка задачи.
В данной курсовой работе реализуется интерпретатор языка С(его
подмножества),для создания программ.
Техническое задание.
1) Наименование.
C subset interpreter (интерпретатор подмножества С- CSI)
2)Основание для выполнения.
Данная работа выполнена на основании приказа на курсовую работу, в
соответствии с учебным планом.
3)Исходные данные на курсовую работу.
тип синтаксического анализатора, набор средств языка, ограничения на
язык, алгоритм реализации интерпретатора.
4)Основное назначение образца это:
а)Интерпретирование исходного кода программы.
б)Предоставления по запросу справки о особенностях языка(ограничеиня
на язык, средства языка определенные в CSI)
5) Цель и назначения разработки.
Цель: Разработка языка CSI для создания программ.
CSI должен обеспечивать:
а)большую
переносимость
интерпретируемой
программы —
программа будет работать на любой платформе, на которой есть
интерпретатор.
б)упрощение отладки исходных кодов программ(по сравнению с
компилированными)
в)меньшие размеры кода по сравнению с машинным кодом,
полученным после обычных компиляторов.
г)легко поддаваться модификации и расширению.
6)Область применения разработки.
Разработка будет применятся в области программирования для
написания программ.
7)Функциональные требования .
Перед использованием данного продукта пользователь должен
ознакомиться с особенностями языка(правила синтаксиса, ограничения
на язык, набор средств языка). Программа должна получить исходные
данные написанные программистом. По запросу, интерпретатор
выполняет реализацию написанного кода по заданному алгоритму и
программа выводит информацию о результате работы на экран. Если в
программе обнаружена ошибка, то выводится тип ошибки и ее
положение в программном коде.
8)Требования к аппаратному обеспечению.
Лицензия на работу с Windows 2000/xp/Vista/7
9)Требования к программному обеспечению
В качестве платформы для запуска программного обеспечения
программа должна использовать Windows 2000/xp/Vista/7.
10) Требования по надежности.
Все части программы должны функционировать без внешних
вмешательств в исходный код и используемые программные средства.
11) Требования по эргономике и механической эстетике.
Данные на экране ПК должны быть однозначноинтерпретируемы.
Элементы пользовательского интерфейса на экране компьютера должны
быть созданы и расположены с учетом удобного визуального восприятия
и цветопередачи.
12) Требования по эксплуатации, удобству технического обслуживания,
ремонту и хранению.
Эксплуатация данного продукта производиться в соответствии
инструкции которая встроена в программу и предоставляется по запросу
пользователя. По вопросам технического обслуживания и ремонта
продукта обращаться в информационно-вычислительный центр НГТУ
им.Алексеева, данный продукт храниться на флешкарте или оптическом
носителе.
13) Требования по стандартизации и унификации.
CSI проектируется на языке программирования С++ с использованием
типовых информационных средств и сервисов.
14)Календарный план
Данный проект выполняется в течении 14-15 недель.
Разработка концептуальной модели системы
Определение "вариантов использования"
Разработка концептуальной модели командного интерпретатора
CSI имеет вид– выделяются три "субъекта":
 источник информации (ИИ)
 обработка полученных данных (ОБП)
 результат работы (РР) ,
И
И
Р
Р
ОБП
Рисунок 1 Схема работы с командным интерпретатором.
Источник информации – текстовый файл, переданный через командную
строку.
Обработка полученных данных –полученные данные интерпретируются
CSI.
Результат работы –результат выводится в консоли.
Для построения концептуальной модели проектируемого командного
интерпретатора
рассмотрим
перечень
предъявляемых
к
ней
функциональных требований. В CSI включены следующие средства
языка:

Параметризованные функции с локальными переменными

Рекурсия

Оператор if

Циклы do-while, while и for

Локальные и глобальные переменные типов int и char

Параметры функций типов int и char

Целые и символьные константы

Оператор return (как со значением, так и без него)

Ограниченный набор стандартных библиотечных функций

Операторы +, -, *, /, %, <, >, <=, >=, ==, !=, унарный -, унарный +

Функции, возвращающие целое значение

Комментарии вида /*...*/
Действующее
лицо
у
данной
программы
одно
–
Пользователь, который обращается к интерпретатору для решения
задачи. И на выходе получает результат.(Рисунок 2)
Рисунок 2
Построение концептуальной модели системы
Для интерпретирования программ на CSI выделим следующие
типы сущностей и объектов.
1) Синтаксический анализатор.
Для построения синтаксического анализатора выражений языка С
применялся метод рекурсивный нисходящий синтаксический анализатор
представляет
собой
набор
взаимно
рекурсивных
функций,
обрабатывающих выражение.
В
интерпретаторе
целью
синтаксического
анализатора
является
вычисление значения заданного выражения.
Синтаксический разбор исходного текста программы.
В интерпретатора CSI в нем определяются следующие категории
лексем:
Тип лексемы
Включает
delimiter (разделитель)
знаки пунктуации и
операторы
keyword (зарезервированное слово) зарезервированные слова
string (строка)
строки, заключенные в
двойные кавычки
identifier (идентификатор)
имена переменных и функций
number (число)
числовая константа
block (блок)
{ или }
Синтаксический анализатор выделяет лексемы из исходного текста
программы и возвращает их в качестве своего значения. Также его
функцией
является поиск
значений целой константы или
переменной, функции или символьной константы. В тексте программы
могут присутствовать функции двух видов: определенные пользователем
и библиотечные. Если встретилась пользовательская функция, ее текст
обрабатывается интерпретатором до получения возвращаемого значения
и выхода из функции. Если встретилась библиотечная функция, то
сначала ищется ее адрес, а затем устанавливается доступ к ней с
помощью ее интерфейсной функции. Библиотечные функции и адреса их
интерфейсных функций содержатся в массиве.
Пример определение значения выражения.
Интерпретатор CSI поддерживает следующие операции: +, -, *, /, %, =,
операторы сравнения (<, ==, > и так далее) и скобки. В языке CSI
выражения определяются с помощью следующих порождающих правил:
выражение
-> [присваивание] [значение_переменной]
присваивание
-> именующее_выражение =
значение_переменной
именующее_выражение
-> переменная
значение_переменной
-> часть [оператор_сравнения часть]
часть
-> терм [+терм] [-терм]
терм
-> множитель [*множитель] [/множитель]
[%множитель]
множитель
-> [+ или -] атом
атом
-> переменная, константа, функция,
или(выражение)
Старшинство оператора определяется порождающим правилом. Чем
выше старшинство оператора, тем ниже в списке операторов он
расположен.
Рассмотрим применение порождающих правил на примере вычисления
выражения
l = 100 - 50 * 3;
Сначала применяется правило 1, разделяющее выражение на три части:
l
=
^
^
|
|
100-50*3
^
|
именующее_выражение присваивание значение_переменной
Поскольку значение нетерминала значение_переменной не содержит
операторов сравнения, то оно может быть сгенерировано в результате
применения порождающего правила для нетерминала терм:
100
-
50*3
^
^
^
|
|
|
минус
терм
терм
Второй терм составлен из двух множителей: 50 и 3. Эти два множителя
являются константами, они порождаются с помощью порождающих
правил более низкого уровня.
Теперь, чтобы вычислить значение выражения, необходимо двигаться,
следуя порождающим правилам, в обратном направлении. Сначала
выполняется умножение 50*3, что дает 150. Потом это значение
вычитается из 100, получается -50. И, наконец, последний шаг —
присваивание этого значения переменной l, оно же является значением
всего выражения.
2) Интерпретатор.
Работа по интерпретации программы на CSI может быть выражена
следующим алгоритмом:
while (есть_лексемы_во_входном_потоке)
{
читать следующую лексему;
выполнить соответствующее действие;
}
Для лучшего понимания этого алгоритма мысленно выполним
интерпретацию следующего фрагмента программы:
int p;
p = 10;
if(p < 100) printf("%d", p);
Согласно алгоритму, прочтем первую лексему int. Эта лексема
указывает на то, что следующим действием должно быть чтение
следующей лексемы для того, чтобы узнать, как называется переменная
(p), которую нужно объявить и для которой нужно выделить область
памяти. Следующая лексема (точка с запятой) заканчивает строку.
Соответствующее действие — проигнорировать ее. Далее, начинаем
следующую итерацию алгоритма и считываем следующую лексему, это а
из второй строки. Строка не начинается с зарезервированного слова,
следовательно, это выражение языка С. Поэтому соответствующим
действием является применение синтаксического анализатора
выражений для вычисления значения выражения. Этот процесс "съедает"
все лексемы во второй строке. Наконец, читаем лексему if. Она
указывает на то, что начинается оператор if. Соответствующее действие
— выполнить его. Аналогичный процесс выполняется многократно, пока
не будет считана последняя лексема программы.
Предварительный проход интерпретатора
Перед тем как интерпретатор начнет выполнять программу, должны быть
выполнены некоторые процедуры так как:
 все программы на С начинают выполняться с функции main().
Вовсе не обязательно, чтобы эта функция была первой в
программе. Поэтому интерпретатор, чтобы начать выполнение с
нее, должен еще до начала выполнения программы узнать, где она
находится. Следовательно, должен быть реализован некоторый
метод, позволяющий начать выполнение программы с нужной
точки. (Глобальные переменные также могут предшествовать
функции main(), поэтому, даже если она является первой
функцией программы, все равно и в этом случае она не начинается
с первой строки.)
 все глобатьные переменные должны быть известны перед началом
выполнения main(). Операторы объявления глобальных
переменных никогда не выполняются интерпретатором, потому что
они находятся вне всех функций.
 для повышения скорости выполнения необходимо (правда, не
всегда) знать, где в программе расположена каждая функция; это
позволит вызывать ее как можно быстрее. Если это условие не
будет выполнено, то при каждом вызове функции понадобится
длительный последовательный поиск этой функции в тексте
программы.
Это решается с помощью предварительного прохода интерпретатора.
Программа предварительного прохода читает исходный текст программы
перед ее выполнением и делает все, что нужно сделать до выполнения.
Она выполняет две важные задачи: во-первых, находит и запоминает
положение всех пользовательских функций, включая main(), и вовторых, находит все глобальные переменные и определяет область их
видимости.
3)Библиотечные функции
Библиотечная функции должна быть обработана непосредственно
интерпретатором. Интерфейсные функции вызываются интерпретатором
каждый раз при встрече библиотечной функции. Интерфейсная функция
осуществляет подготовку к вызову библиотечной функции и
обрабатывает возвращаемые значения.
Интерпретатор, содержит пять библиотечных функций:
 считывание символа с клавиатуры и возврат его значения (getche)
 вывод символа на экран (putch)
 вывод строки на экран (puts)
 чтение целого числа с клавиатуры и возврат его значения (getnum)
 вывод строки на экран (print)
 вывод целого числа на экран (print)
Рисунок 3. Концептуальная модель системы
Логическая модель
Разработанная концептуальная модель легла в основу логической
1)Рекурсивный нисходящий синтаксический анализатор,
который представляет собой реализацию в языке С производящих
правил.
Рекурсивный нисходящий синтаксический анализатор представляет
собой набор взаимно рекурсивных функций, обрабатывающих
выражение. Целью синтаксического анализатора является вычисление
значения заданного выражения.
Функции анализатора начинает работу с удаления пробелов и
символов перевода строки. После этого строка, представляющая каждую
лексему, определяет ее тип. если синтаксический анализатор находит
синтаксическую ошибку, то он вызывает функцию со значением
перечислимого типа, соответствующим типу найденной ошибки.
Функции анализатора находит значение целой константы или
переменной, функции или символьной константы.
Интерпретатор
while (есть_лексемы_во_входном_потоке) {
читать следующую лексему;
выполнить соответствующее действие;
}
Библиотечные функции
В тексте программы могут присутствовать функции двух видов:
определенные пользователем и библиотечные. Если встретилась
пользовательская функция, ее текст обрабатывается интерпретатором до
получения возвращаемого значения и выхода из функции. Если
встретилась библиотечная функция, то сначала ищется ее адрес, а затем
устанавливается доступ к ней с помощью ее интерфейсной функции.
Описание программы
Описание состава ПО SCI
7.1
В состав программного комплекса SCI входят:

Программа, предназначенная для приема и интерпретации данных(SCI.exe)

html-справка пользователя.
Программа,
предназначенная для приема и интерпретации
данных(SCI.exe):

Обеспечение считывание данных из файла

Интерпретация полученных данных

Вывод результата на экран
html-справка пользователя:

Информирует пользователя о работе программы

Ограничения работы программы

Контактная информация, лицензия
Схема работы с SCI пользователя.
Руководство пользователя.
7.2
Руководство пользователя:
Общие сведения о продукте:
SCI состоит из одной программы которая компонуется из из:
 Синтаксический анализатора
 Интерпретатора
 Библиотечный функций
 Main-файл.
Данное приложение подпадает под действие свободной лицензии.
Разработчики не несут никакой ответственности за последствия
использования вами данного продукта.
Руководство пользователя 7.2.1
Ограничения на язык
Прежде чем работать с программой пользователью необходимо
ознакомится с всеми ограничениями.
. В CSI включены следующие средства языка:

Параметризованные функции с локальными переменными

Рекурсия

Оператор if

Циклы do-while, while и for

Локальные и глобальные переменные типов int и char

Параметры функций типов int и char

Целые и символьные константы

Оператор return (как со значением, так и без него)

Ограниченный набор стандартных библиотечных функций

Операторы +, -, *, /, %, <, >, <=, >=, ==, !=, унарный -, унарный +

Функции, возвращающие целое значение

Комментарии вида /*...*/
Первое ограничение заключается в том, что телом операторов if,
while, do и for может быть только блок, заключенный в фигурные
скобки. Если телом является единственный оператор, он также
должен быть заключен в фигурные скобки. Например,
интерпретатор SCI не сможет правильно обработать следующий
фрагмент программы:
for(a=0; a<10; a=a+1)
for(b=0; b<10; b-b+1)
for(c=0; с<10; с=с+1)
puts("привет");
if (...)
if (...) х = 10;
Этот фрагмент должен быть написан так:
for(a=0; a<10; a=a+1) {
for(b=0; b<10; b-b+1) {
for(c=0; с<10; с=с+1) {
puts("привет");
}
}
}
if (...) {
if (...) {
х = 10;
}
}
Благодаря этому ограничению интерпретатору легче найти конец
участка программы, составляющего тело одного из операторов
управления программой. К тому же, поскольку чаше всего
операторы управления программой обрабатывают именно блок, это
ограничение не выглядит слишком обременительным.
Другое ограничение заключается в том, что не поддерживаются
прототипы функций. Предполагается, что все функции возвращают
тип int, разрешен возвращаемый тип char, но он преобразуется в int.
Проверка правильности типа параметра не выполняется.
Все локальные переменные должны быть объявлены в самом
начале функции, сразу после открывающейся фигурной скобки.
Локальные переменные не могут быть объявлены внутри какоголибо блока. Поэтому следующая функция в языке SCI является
неправильной:
int myfunc()
{
int i; /* это допустимо */
if(1) {
int i; /* в языке Little С это не допустимо */
}
}
Здесь объявление переменной i внутри блока if для интерпретатора
SCI является недопустимым. Требование объявления локальных
переменных только в начале функции немного упрощает
реализацию интерпретатора.
И, наконец, последнее ограничение: определение каждой функции
должно начинаться с зарезервированного слова char или int.
Следовательно, интерпретатор SCI не поддерживает традиционное
правило "int по умолчанию". Таким образом, следующее
объявление является правильным:
int main()
{
/* ... */
}
однако следующее объявление в языке SCI неправильное:
main()
{
/* ... */
}
Также интерпретатор SCI поддерживает типы данных int и char
Размер программы: 10000 символов
Количество глобальных и локальных функций:31
Библиотечных функции:
 считывание символа с клавиатуры и возврат его значения (getche)
 вывод символа на экран (putch)
 вывод строки на экран (puts)
 чтение целого числа с клавиатуры и возврат его значения (getnum)
 вывод строки на экран (print)
 вывод целого числа на экран (print)
Перед запуском программы надо открыть командную строку(в Windows
cmd-строка)
Выполнить->cmd
Запускаем cmd строку
Вводим аргументы 1-ый название программы, 2-ой текстовый документ с
программой
Результат работы, если код написан правильно с учетом
ограничений
Результат работы, если коде обнаружена ошибка
Описание состава ПО:
Проект состоит из:

- Программа, предназначенная для приема и интерпретации данных(SCI.exe)
включает файлы:
main.cpp, analizator.cpp, interpritator.cpp, library.cpp

Html-Справка
Разработка тестового примера.
Работа интерпретатора SCI демонстрируется с помощью следующих
примеров программ.
Программа №1 иллюстрирует все средства программирования,
поддерживаемые в SCI:
/* SCI. Демонстрационная программа №1.
Эта программа демонстрирует работу всех средств
языка C, поддерживаемых интерпретатором SCI.
*/
int i, j;
/* глобальные переменные */
char ch;
int main()
{
int i, j;
/* локальные переменные */
puts("Программа демонстрации Little C.");
print_alpha();
do {
puts("Введите число (0, если выход): ");
i = getnum();
if(i < 0 ) {
puts("числа должны быть положительными,
введите еще");
}
else {
for(j = 0; j < i; j=j+1) {
print(j);
print("сумма равна");
print(sum(j));
puts("");
}
}
} while(i!=0);
return 0;
}
/* Сумма чисел от 0 до введенного числа. */
int sum(int num)
{
int running_sum;
running_sum = 0;
while(num) {
running_sum = running_sum + num;
num = num - 1;
}
return running_sum;
}
/* Вывод на экран английского алфавита. */
int print_alpha()
{
for(ch = 'A'; ch<='Z'; ch = ch + 1) {
putch(ch);
}
puts("");
return 0;
}
Следующий пример демонстрирует использование вложенных циклов:
/* Пример с вложенными циклами. */
int main()
{
int i, j, k;
for(i = 0; i < 5; i = i + 1) {
for(j = 0; j < 3; j = j + 1) {
for(k = 3; k ; k = k - 1) {
print(i);
print(j);
print(k);
puts("");
}
}
}
puts("выполнено");
return 0;
}
Следующий пример демонстрирует работу оператора присваивания:
/* Присваивание как операция. */
int main()
{
int a, b;
a = b = 10;
print(a); print(b);
while(a=a-1) {
print(a);
do {
print(b);
} while((b=b-1) > -10);
}
return 0;
}
Следующий пример демонстрирует выполнение рекурсивных функций.
В ней функция factr() вычисляет факториал числа.
/* Демонстрация рекурсивных функций. */
/* возвращает факториал числа i */
int factr(int i)
{
if(i<2) {
return 1;
}
else {
return i * factr(i-1);
}
}
int main()
{
print("Факториал от 4 равен: ");
print(factr(4));
return 0;
}
В следующей программе демонстируются различные приемы
использования аргументов функций:
/* Использование аргументов функций. */
int f1(int a, int b)
{
int count;
print("в функции f1");
count = a;
do {
print(count);
} while(count=count-1);
print(a); print(b);
print(a*b);
return a*b;
}
int f2(int a, int x, int y)
{
print(a); print(x);
print(x / a);
print(y*x);
return 0;
}
int main()
{
f2(10, f1(10, 20), 99);
return 0;
}
И, наконец, в последнем примере демонстрируется работа операторов
цикла:
/* Оператор цикла. */
int main()
{
int a;
char ch;
/* the while */
puts("Введите число: ");
a = getnum();
while(a) {
print(a);
print(a*a);
puts("");
a = a - 1;
}
/* цикл do-while */
puts("Введите символ, если выход, то 'q' ");
do {
ch = getche();
} while(ch !='q');
/* цикл for */
for(a=0; a<10; a = a + 1) {
print(a);
}
return 0;
}
10
Безопасность и экологичность проекта
10.1
Анализ опасных и вредных производственных факторов
На рабочем месте разработчика, согласно ГОСТ 12.0.003-74 «Опасные и
вредные производственные факторы. Классификация», можно выделить следующие
опасные и вредные производственные факторы:
Физические:

Повышенный уровень электромагнитных излучений;

Повышенная или пониженная подвижность воздуха, влажность и температура
воздуха;

повышенное значение напряжения в электрической сети, замыкание, которое
может произойти через тело человека;

повышенный уровень шума на рабочем месте;

повышенная напряженность магнитного поля.
Психофизиологические:

Умственное
перенапряжение,
деятельностью
связанное
с
постоянной
разработчика, поиском решений
умственной
поставленных задач и
освоением новых технологий, необходимых для реализации их решения;

перенапряжение анализаторов, в первую очередь зрения. Опасность связана с
тем, что основным источником информации является монитор компьютера;

физические
перегрузки
статического
характера,
связанные
с
малой
рабочее
место
подвижностью в течение всего рабочего дня.
Источников
химической
и
биологической
опасности
разработчика не имеет.
10.1.1 Техника безопасности
Данный раздел предоставляет сведения об организации безопасности
производственного процесса и электробезопасности на рабочем месте разработчика.
5.3 Анализ влияния опасных и вредных факторов, при
эксплуатации программы интерпретатора SCI
Разрабатываемая в данном дипломном проекте модель внешней
среды, представляет собой программный комплекс, функционирующий
на средствах вычислительной техники, при эксплуатации которых
возникают следующие опасные и вредные факторы:
Физические:
–
повышенный уровень шума на рабочем месте;
–
опасный
уровень
напряжения
в
электрической
цепи,
замыкание которой может произойти через человека;
–
пожарная опасность;
–
повышенный уровень электромагнитных излучений;
–
повышенная яркость света;
–
прямая и отраженная блеклость;
–
нарушение микроклимата рабочих помещений.
Психофизиологические:
–
гиподинамия;
–
умственное перенапряжение;
–
перенапряжение зрительных анализаторов;
5.3.1 Повышенный уровень шума на рабочем месте
Шум при работе средств вычислительной техники возникает при
работе вентиляторов блоков питания аппаратуры, устройств вывода
информации – принтеров, графопостроителей.
При длительном воздействии шума на человека происходят
нежелательные явления: снижается острота слуха, повышается кровяное
давление. Кроме того, шум оказывает воздействие на общее состояние
человека, вызывая чувства неуверенности, стесненности, тревоги,
плохого самочувствия, что приводит к снижению производительности
труда, возникновению ошибок, может стать причиной травматизма.
Ослабления шума можно достигнуть следующими способами:
–
уменьшение шума в источнике;
–
изменение направленности излучения;
–
рациональная
планировка
рабочего
помещения
(звукоизоляция стен, окон, дверей, потолка; установка штучных
звукопоглощателей; размещение более тихих помещений вдали от
шумных);
–
борьба
с
шумом
на
пути
его
распространения
(звукоизолирующие ограждения, кожухи, экраны, кабины).
Уровень
шума
на
рабочем
месте
должен
соответствовать
требованиям ГОСТ 12.1.003-83. Согласно этому ГОСТу уровень
звукового давления на постоянных рабочих местах в производственных
помещениях при продолжительности шума более четырех часов должен
соответствовать данным в таблице 5.2
Помеще
ния
Среднегеометрические частоты октавных
полос, Гц
1.5
У
ровень
3
6
1
2
3
25
50
00
звука,
8
000 000 000 000 дБА
5
1
2
4
Уровни звукового давления, дБ
ние
места
постоян
8
7
6
5
4
4
4
4
3
рабочие 6
1
1
4
9
5
2
0
8
0
в
5
офисных
помещениях
5.3.2 Опасный уровень напряжения электрической цепи, замыкание
которой может произойти через человека
Все используемые в данной разработке средства вычислительной
техники
в
качестве
источника
питания
используют
переменное
напряжение сети 220В, что может повлечь за собой поражение человека
электрическим током. В соответствии с классификацией помещений по
степени электрической опасности используемое рабочее помещение
можно отнести к особо опасным.
Причинами поражения человека электрическим токов являются:
–
случайное прикосновение или приближение на опасное
расстояние к токоведущим частям, находящимся под напряжением;
–
появление напряжения на металлических конструктивных
частях электрооборудования – корпусах, кожухах и т.д. в результате
повреждения изоляции и других причин;
–
появление напряжения
на отключенных
токоведущих
частях, на которых работают люди, вследствие ошибочного включения
устройства;
–
возникновение шагового напряжения на поверхности земли
в результате замыкания провода на землю.
При работе аппаратуры запрещается:
1.
проверять на ощупь наличие напряжения токоведущих
частей аппаратуры;
2.
применять для соединения блоков и приборов провода с
поврежденной изоляцией;
3.
проводить работу и монтаж в аппаратуре, находящейся под
напряжением;
4.
подключать блоки и прибора к работающей аппаратуре.
Чтобы избежать поражения электрическим током используются
следующие технические средства, обеспечивающие безопасность работ в
электроустановках:
–
защитное заземление;
–
защитное отключение;
–
зануление;
–
выравнивание потенциалов.
5.3.3 Пожарная опасность
Пожары в ВЦ представляют особую опасность, так как сопряжены
с огромными материальными потерями.
В
качестве
горючего
компонента
на
ВЦ
могут
служить
строительные материалы для акустической и эстетической отделки
помещений, перегородки, окна, двери, полы, мебель, стеллажи,
магнитные ленты и диски, изоляция силовых кабелей, а также
радиотехнические детали и соединительные провода электронной схемы.
Окислитель в виде кислорода воздуха имеется в любой точке
помещения ВЦ.
Источниками воспламенения на ВЦ могут быть электрические
искры, дуги и перегретые участки. Источники воспламенения возникают
в
электронных
схемах,
кабельных
линиях,
вспомогательных
электрических и электронных приборах, а также в устройствах,
применяемых для технического обслуживания элементов ЭВМ.
Таким образом, на ВЦ могут присутствовать все три основные
фактора, способствующих возникновению пожара.
Кабельные
линии
электропитания
состоят
из
горючего
изоляционного материала, а также содержат вероятные источники
открытого огня. Они являются –наиболее опасным элементом в
конструкции
ЭВМ
и
вычислительного
центра
с
точки
зрения
возникновения и развития пожара.
Другим местом, где может возникнуть пожар, является хранилище
информации. Ущерб от пожара определяется не только стоимостью
сгоревших магнитных лент и дисков, но и потерей информации,
записанной на ней.
Для
обеспечения
своевременных
мер
по
обнаружению
и
локализации пожара, эвакуации рабочего персонала, а также для
уменьшения материальных потерь необходимо выполнять следующие
условия:
–
наличие системы автоматической пожарной сигнализации;
–
наличие эвакуационных путей и выходов;
–
наличие первичных средств тушения пожаров: пожарные
стволы, внутренние пожарные водопроводы, сухой песок, огнетушители.
Следует обратить особое внимание на то, что применение воды в
машинных залах ЭВМ, ввиду опасности повреждения дорогостоящего
электронного
оборудования
возможно
только
в исключительных
случаях, когда пожар угрожает принять крупные размеры.
5.3.4 Повышенный уровень электромагнитных излучений
Электромагнитные
излучения
влияют
на
нервную
систему
человека, изменяют ориентацию клеток и цепей молекул в соответствии
с направлением силовых линий электрического поля, биохимическую
активность молекул и состав крови.
Действующие нормы СНиП 848-70 предусматривают следующие
предельно допустимые величины:
1.
напряженность электромагнитных полей радиочастот на
рабочих местах на должна превышать по электрической составляющей
20 В/м в диапазоне частот 100 кГц-30МГц и 5 В/м в диапазоне 30-300
МГц;
2.
по магнитной составляющей предельная величина равна 5
А/м в диапазоне частот 100 кГц-1.5МГц.
Ослабления мощности электромагнитного поля можно достичь
следующими способами:
1.
увеличить расстояние между источником и рабочим местом;
2.
установить поглощающий или отражающий экран между
источником и рабочим местом.
5.3.5 Повышенная яркость света
Свет является важным стимулятором не только зрительного
анализатора, но и организма в целом, а также общей работоспособности
человека. Положительное влияние его на производительность труда и
качество работы в настоящее время не вызывает сомнений.
Обеспечение гигиенически рациональных условий освещения
способствует длительному сохранению работоспособности, что приводит
к росту производительности труда и к снижению ошибок в процессе
труда.
Поскольку при работе с программным комплексом главным
источником визуального отображения информации является монитор,
который представляет собой самосветящийся прибор, то общая
освещенность может вызвать перегрузку зрительных органов, что
приводит к повышенному утомлению зрения в процессе выполнения
работ и повышает опасность травматизма зрительных органов.
Освещенность рабочей зоны должна соответствовать нормам
СНиП 11-4-79 «Искусственное освещение для зрительной работы малой
степени точности (разряд V) и работа с самосветящимися материалами
(разряд VII).
Яркость в поле зрения работающего должна быть распределена
равномерно. Поскольку в поле зрения работающего постоянно находятся
поверхности, значительно отличающие по яркости (например: экран
монитора – текстовый документ и т.д.) то при переводе взгляда в
яркоосвещенной
на
слабоосвещенную
поверхность
глаз
должен
переадаптироваться. Частая переадаптация ведет развитию утомления
зрения.
Степень
неравномерности
определяется
коэффициентом
неравномерности, который согласно требованиям СНиП 11-4-79 для
данного вида работ должен быть не менее 0.3 в пределах рабочей
области.
10.2
Организация
рабочего
места
согласно
эргономическим
требованиям.
Требования к рабочим местам администраторов, инженеров, использующих
ЭВМ, установлены Санитарными правилами и нормами СанПиН 2.2.2/2.4.1340-03
“Гигиенические требования к видеодисплейным терминалам, ПЭВМ и организации
работы”.
Согласно этим требованиям площадь на одно рабочее место с ПЭВМ для
взрослых должна составлять не менее 4 м2, а объем – не менее 20 м3. Помещение, где
располагается рабочее место имеет площадь 40 м2 и объем 140.5 м3, три рабочих
места с ПЭВМ и предназначено для одновременной работы 3-х человек.
Требования к рабочему месту оператора с учетом физиологических и
антропометрических данных человека регламентируются ГОСТ ССБТ 12.2.032-78
“Рабочее место при выполнении работ сидя. Общее эргономические требования.”,
согласно
которому
рабочее
место
разработчика
обеспечивает
возможность
выполнения работ в положении сидя, с ограниченной подвижностью во время
работы. Размеры рабочей зоны составляют 380-500 мм, прилагаемые усилия – до 50
Н. Расположение оборудования и рабочего места соответствует малой статической
утомляемости, спокойному расположению рук оператора, возможности выполнения
точной работы.
Согласно СанПиН 2.2.2./2.4.1340-03 организовано следующее рабочее место
разработчика (рис 11.10.1):

высота рабочей поверхности стола регулируется в пределах 680800 мм;

рабочий стол имеет пространство для ног высотой не менее 600 мм,
шириной – не менее 500 мм, глубиной на уровне колен – не менее
450 мм, на уровне вытянутых ног – не менее 650 мм;

рабочее кресло (стул) передвижной, подъемно-поворотный и
регулируемый по высоте, углу наклона сиденья и спинки,
расстоянию спинки от переднего края сиденья; шириной и
глубиной поверхности сиденья не менее 400 мм;

регулировка высоты поверхности сиденья в пределах 400-550 мм и
углам наклона до 15 градусов вперед и до 15 градусов назад;

высоту опорной поверхности спинки 280-320 мм и ширину – не
менее 380 мм;

угол наклона спинки в вертикальной плоскости в пределах 0..30;

регулировку расстояния спинки от переднего края сиденья в
пределах 260-400 мм.
Средства отображения информации отвечают следующим техническим
требованиям:

яркость свечения экрана не менее 300 Кд/м2;

минимальный размер точки растра не более 0.3 мм для ЖК
монитора;

частота регенерации изображения в текстовом режиме не менее 72
Гц;

количество точек растра на строку не менее 800;

наличие антибликового покрытия экрана;

размер экрана не менее 35 см по диагонали;

высота символов на экране не менее 3.8 мм;

расстояние от глаз оператора до экрана 40-80 см;

монитор
оборудован
поворотной
подставкой,
позволяющей
перемещать его в горизонтальной и вертикальной в пределах 120180 мм и изменять угол наклона экрана на 10-15°.
На
рисунке
разработчика.
10.3.1
приведено
правильно
устроенное
рабочее
место
Рисунок 10.3.1 Рабочее место
Одним из важнейших факторов, влияющих на процесс труда, является
правильно выбранный режим труда. Согласно СанПиН 2.2.2./2.4.1340-03 суммарное
время непосредственной работы с ПЭВМ за рабочую смену составляет не более 6
часов. На протяжении рабочей смены были организованы регламентированные
перерывы по 10 мин. от каждого часа работы. Для компенсации ограниченной
подвижности в перерывах выполняется зарядка. Продолжительность непрерывной
работы с ПЭВМ без перерыва не превышает 2 часов.
Стены в помещении имеют светлые обои, имеется подвесной потолок серого
цвета, пол покрыт линолеумом светло-бежевого цвета, что способствует нормальной
равномерной освещенности помещения в целом и рабочих мест в частности.
5.3.7 Нарушение микроклимата рабочих помещений
Метеорологические условия или микроклимат в производственных
помещениях определяется следующими параметрами:
1.
температура воздуха, С;
2.
относительная влажность, %;
3.
скорость движения воздуха на рабочем месте, м/с.
Работа с комплексом программно-аппаратных средств относится к
работам легкой тяжести (I категория), т.к. выполняется сидя или стоя,
может быть связана с ходьбой, но не требует систематического
физического напряжения и переноски тяжестей. Согласно категории
проводимых работ и ГОСТ 12.1.005-76 оптимальные параметры
микроклимата при проведении данной работы должны соответствовать
значениям, указанным в таблице 5.3.
Таблица 5.3.
Период
Температу
ра, С
года
Относител
ьная
Скорость
влажность воздуха, м/с
воздуха, %
Холодный
20-23
60-40
0.1
22-25
60-40
0.1
и переходный
Теплый
Запыленность воздуха в машинном зале не должна превышать 0.2
мг/м2 при размере частиц не более 2 мкм.
Для обеспечения установленных параметров микроклимата и
чистоты воздуха в машинном зале применяют вентиляцию. В ВЦ
применяют общеобменную искусственную вентиляцию в сочетании с
местной, как искусственной, так и естественной. Общеобменная
вентиляция
используется
для
обеспечения
в
помещениях
ВЦ
соответствующих микроклиматических параметров; местная – для
охлаждения собственно ЭВМ и вспомогательного оборудования.
В помещениях ВЦ предусматривают систему отопления, которая
должна обеспечивать достаточное, постоянное и равномерное нагревание
воздуха в холодный период года.
5.3.8 Защита от психофизиологических факторов
Защита от психофизиологических факторов осуществляется за счет
реализации эргономических требований, предъявляемых к аппаратуре и
рабочему месту в целом.
Эргономические требования в комплексе выражают три стороны
деятельности человека – эффективность работы, сохранение здоровья и
развитие личности в процессе труда. Эти требования определяются
характеристиками человека. В перечне общих требований эргономики
различают требования, учитываемые в процессе разработки ПЭВМ
(требования к информации, предъявляемой человеку-оператору и к
техническим средствам) и требования, учитываемые при эксплуатации
изделий (требования к рабочим местам и рабочей среде).
Download