- •Учебные материалы
- •1 Лекция: Введение. История, предмет, структура информатики
- •2 Лекция: Информация, ее представление и измерение
- •3 Лекция: Кодирование и шифрование информации
- •4 Лекция: Системы счисления и действия в них:
- •5 Лекция: Высказывания и предикаты
- •6 Лекция: Логические вентили, схемы, структуры
- •7 Лекция: Базовые алгоритмические структуры
- •8 Лекция: Данные, их типы, структуры и обработка
- •9 Лекция: Методы разработки и анализа алгоритмов
- •10 Лекция: Исполнители алгоритмов - человек и автомат
- •11 Лекция: Программное и техническое обеспечение
- •12. Лекция: Формальные языки и грамматики
- •13 Лекция: Введение в моделирование объектов, процессов и явлений
- •14 Лекция: Введение в информационные технологии
- •15 Лекция: Информатизация общества, информационное общество. Интернет
- •16 Лекция: Основы информационных сетей
- •1 Основы сетей и сетевых технологий
- •1.1 Два корня сетей передачи данных
- •1.2 Появление первых вычислительных машин
- •1.3 Программные мониторы — первые операционные системы
- •1.4 Мультипрограммирование
- •5 Многотерминальные системы — прообраз сети
- •1.6 Первые сети — глобальные
- •1.7 Наследие телефонных сетей
- •2 Эволюция вычислительных сетей: от первых локальных сетей до современных сетевых технологий
- •2.1 Мини-компьютеры — предвестники локальных сетей
- •2.2 Появление стандартных технологий локальных сетей
- •2.3 Роль персональных компьютеров в эволюции компьютерных сетей
- •2.4 Новые возможности пользователей локальных сетей
- •2.5 Эволюция сетевых операционных систем
- •3 Основные задачи построения сетей
- •3.1 Связь компьютера с периферийными устройствами
- •3.2 Связь двух компьютеров
- •3.3 Клиент, редиректор и сервер
- •3.4 Задача физической передачи данных по линиям связи
- •4 Проблемы связи нескольких компьютеров
- •4.1 Топология физических связей
- •4.2 Адресация узлов сети
- •17 Лекция: Основы систем управления баз данных
- •1 Общие сведения о проектировании информационных систем и баз данных
- •1.1 Некоторые термины и определения, используемые при работе с базами данных
- •1.2 Принципы проектирования информационных систем
- •2. Принципы организации баз данных
- •2.1 Классификация баз данных
- •2.2 Ранние подходы к организации баз данных
- •2.2.1 Иерархические базы данных
- •2.2.2 Сетевые базы данных
- •2.3 Современные базы данных
- •2.3.1 Реляционные системы
- •2.3.2 12 Правил Кодда
- •2.3.3 Соблюдение условий ссылочной целостности в реляционной базе данных
- •2.3.4 Основные стратегии поддержания ссылочной целостности
- •2.3.5 Дополнительные стратегии поддержания ссылочной целостности
- •2.4 Постреляционные базы данных
- •2.4.1 Серверы баз данных
- •2.4.2 Распределенные базы данных
- •18 Лекция: Информационные ресурсы общества Виды и классификация информационных ресурсов
- •Информационные ресурсы как форма представления знаний
- •Знание как национальное достояние
- •Классификация информационных ресурсов
- •Количественные характеристики некоторых видов информационных ресурсов России
- •Электронизация информационных ресурсов общества как актуальная проблема
- •2.Информационная инфраструктура общества Понятие и основные компоненты информационной инфраструктуры общества
- •Центры-генераторы информационных ресурсов общества
- •Основные тенденции изменения информационной инфраструктуры общества
- •3.Информационные продукты и услуги Определение основных понятий
12. Лекция: Формальные языки и грамматики
Рассматриваются основные сведения о формальных и естественных языках, грамматиках, типах грамматик, грамматическом анализе, переводе с языков, типах трансляторов.
Математический язык как форма выражения научного знания использовался еще в древности при решении практических задач.
Большую роль в развитии математики как языка – метаязыка наук – сыграла математическая логика, аксиоматизировавшая ряд теории, изучившая их логику, внутреннюю структуру.
Развитие информатики, особенно таких ее разделов, как теория формальных языков, грамматик, структур, алгоритмических языков и методов трансляции баз данных и знаний и других приводит к развитию, углублению, формализации и структурированию предметов наук.
В свою очередь, появилась возможность моделирования языковых структур, формализации, структурирования ряда языков общения, анализа и построения различного рода текстов и словарей, в том числе – их автоматического построения.
Язык, определенный с помощью алфавита (над алфавитом) X = {x1, x2, ... , xn} , – это некоторая устная, звуковая, письменная или иная форма выражения слов над X, включая синтаксис – правила образования структур из слов и словосочетаний, семантику – правила проверки правильности, смысловой однозначности и совместимости синтаксических конструкций языка, состоящих из лексем. Для устных языков (общения) нужна и фонетика – правила произношения составных частей предложения, то есть фонем.
Язык как коммуникативный аппарат должен иметь определяющие конструкции слов над данным алфавитом, грамматические правила образования предложений из слов и соотнесения этих предложений тем явлениям и процессам, которые они описывают, или синтаксическим и семантическим правилам.
Пример. В частности, семантика изучает связи вида:
"знак, структура знаков значениеобъект";
а синтаксис – связи вида:
"знак, структура знаков объект".
Основные функции любого языка – отображение, передача, сжатие, хранение, актуализация информации с помощью сообщений на этом языке.
Пример. Запишем более кратко, сжато, точно (формализованно) факт "целое число x делится на целое число y без остатка". На математическом языке это будет иметь вид "Число x кратно числу y". Факт, что числа x, y – целые, уже можно специально, как выше, не оговаривать, так как математическое понятие кратности это уже предполагает (аксиома). Запишем еще более кратко и формализовано на алгоритмическом языке Basic: "x mod y = 0". Здесь уже условие кратности область изменения аргументов не нужно оговаривать – они декларированы в языке Basic (в описаниях типов и операции mod).
Языки бывают естественного происхождения (например языки общения) и искусственного происхождения или формальные языки, разрабатываемые для общения человека с автоматом (компьютером) либо для описания и получения знаний.
Пусть X – некоторый алфавит, X = {x1, x2, ... , xn} , а S(X) – множество слов над алфавитом X, тогда S(X) – бесконечное и счетное множество.
Формальный язык L(X) – произвольное подмножество S(X).
Формальный язык использует естественный язык как лексическую форму оформления входящих в него абстрактных объектов, как метаязык или язык для описания синтаксиса другого языка. Описываемый метаязыком язык в этом случае называется объектным языком (по отношению к метаязыку).
Формальная грамматика G состоит из совокупностей: T = {t1, t2, ... , tk} – множество терминальных символов языка или множество основных понятий языка; N = {n1, n2, ..., nm} – множество нетерминальных символов языка или вспомогательных понятий, обозначений конкретных классов слов, например, глаголов или предлогов, причем во множестве N содержится n0 – начальный символ из N; P = {p1, p2, ..., pq} – система подстановок (продукции) слов вида в словаили замен всех словs1(x) в рассматриваемой системе соотношений на слова вида s2(x) .
Язык (множество слов S(X)) задается грамматикой G(S) – структурой правил, которые позволяют порождать все слова и только их.
Грамматический анализ – процесс редукции (сведению, упрощению) к нетерминальному символу или слову.
Множество – словарьграмматики G. Правила вывода – это непустое множество правил вида , где, а "" – отношение вида "левое (можно) заменить на правое".
Слово выводимо из слова с помощью правила, если,. Последовательностьназываетсявыводом g из f, если fi+1 выводимо из fi для всех . Признаком завершения процесса (последовательности) вывода является отсутствие слова, выводимого изg.
Пример. Опишем элементы естественного, например, русского языка в терминах формальных грамматик. Алфавит языка X = {А, а, Б, б, ... , Я, я, ., ,, :, ;, ., !, ?, ", ", (, )}, T={<корни>, <приставки> и т.д.}, N = {предложение, подлежащее, сказуемое, глагол, местоимение и т.д.}, n0 = "предложение" . Например, пусть
Т = {арбуз, банан, красный, греет, загорает, бок},
N = {сказуемое, подлежащее, определение, дополнение, группа подлежащего, группа сказуемого},
n0 = {предложение},
P = {p1: предложение → (группа подлежащего), (группа сказуемого),
p2: группа подлежащего → (определение) (подлежащее),
p3: группа сказуемого → (сказуемое) (дополнение),
p4: определение → "красный",
p5: подлежащее → "арбуз",
p6: подлежащее → "банан",
p7: сказуемое → "греет",
p8: дополнение → "банан",
p9: дополнение → "бок"}.
Тогда справедливы следующие выводы:
предложение (группа подлежащего) (группа сказуемого) →
(определение) (подлежащее) (группа сказуемого) →
(определение) (подлежащее) (сказуемое) (дополнение) →
"красный" (подлежащее) (сказуемое ) (дополнение) →
"красный арбуз" (сказуемое) (дополнение) →
"красный арбуз греет" (дополнение) →
"красный арбуз греет бок".
Таким образом, мы по формальным правилам построили предложение естественного языка.
Различают четыре основных типа формальных грамматик.
Грамматика типа 0 (G–0) – грамматика, в которой нет ограничений на правила вывода (то есть в правиле вывода ,f и g – любые).
Грамматика типа 1 (G–1) – грамматика, в которой содержатся правила вида, гдеn – нетерминальный символ ,f1 , f2 , w – цепочки из словаря W.
Грамматика типа 2 (G–2) – грамматика, в которой допустимы лишь правила вида .
Грамматика типа 3 (G–3) имеет правила вида , либо, где.
Грамматики типа G–0 называются свободными, типа G–1 – контекстно-зависимыми, типа G–2 – контекстно-свободными, типа G–3 – регулярными или автоматными.
Выражение, записанное на метаязыке с помощью конечного (счетного) числа операций и операндов, называется регулярным выражением.
В формальных грамматиках рассматриваются три основные проблемы:
проблема вхождения – построить алгоритм, который для каждого задаваемого слова выясняет, принадлежит ли оно языку, допускаемому данной грамматикой;
проблема анализа – построить алгоритм, который для каждого слова, допускаемого данной грамматикой, строит вывод этого слова;
проблема оценки сложности алгоритма вывода (вычислений).
Если первые две задачи – преимущественно "грамматического" характера, то третья задача – более "алгоритмического" характера.
С появлением компьютеров повысились требования к точности и структурированности алгоритма. Для этих целей разрабатываются алгоритмические языки. Это формальный язык, формализованный язык, так как он включает в себя и математическую символику, например, числа, знаки операций, переменные, выражения и др.
Алгоритмический язык – средство записи алгоритмов для исполнения, изучения логики алгоритма. Основное отличие алгоритмического языка от языка программирования (хотя их часто отождествляют) состоит в том, что последний предназначен для записи и исполнения алгоритмов в виде, понятном и исполнимом ЭВМ.
Основные атрибуты языка алгоритмического (программирования):
константы – постоянные величины (числовые, символьные, логические);
символы – знаки, имеющие различные коды при переводе;
идентификаторы – имена, именования различных объектов алгоритма;
переменные – для именования изменяемых величин, параметров;
метки – именования различных частей, участков алгоритмов;
процедуры – функционально завершенные именованные части алгоритма;
описания – соглашения о типе, характере, структуре используемых данных и стандартизации представления (описания) данных;
комментарии – пояснения к различным участкам алгоритма;
операторы – команды преобразования используемых, получаемых данных или изменения порядка их выполнения;
выражения – записи, образуемые из постоянных, переменных и знаков операций и являющиеся источниками значений; сюда отнесем и функции стандартные (встроенные), с которыми можно оперировать, как и с переменными, в соответствии с их атрибутами.
Любые математические выражения записываются на алгоритмических языках по правилам не только математики, но и этого языка.
Пример. На алгоритмическом языке Basic математическое выражение
будет записано в виде y = 2^x + 3*sin(x – 4/5))*log(x + sqrt(x + 5)).
Пример. Выражению Basic w = sqrt((b + c)^2 + 2/a*x/c) соответствует математическое выражение вида .
Вычисление значений выражений на алгоритмическом языке происходит в соответствии с принятым в языке старшинством операций.
Пример. Найдем
b = log(ехр(5)) + min(max(3,2),6) + (15 mod 4)*int(1.99),
где min(x,y) и max(x,y) – функции, возвращающие минимальное и максимальное из двух чисел, соответственно.
Результат равен: b = 5 + min(3,6) + 3*1 = 5 + 3 + 3 = 11.
Первые ЭВМ поставлялись без программного обеспечения, и программисту приходилось описывать в программе все необходимое для ее работы. Разработка первых алгоритмических языков (например, ForTran) упростила программирование, увеличила число людей, решающих на компьютере свои задачи без привлечения программистов, положила начало двум основным направлениям в программировании: прикладному и системному программированию, а затем и третьему – инструментальному программированию.
Прикладной программист (обычно на языках программирования высокого уровня) разрабатывает программы решения конкретных естественнонаучных задач.
Системный программист (обычно на языках программирования низкого уровня) разрабатывает программы автоматизации процесса написания и отладки прикладных программ, распределения ресурсов между прикладными программами, управления процессом прохождения таких прикладных программ на ЭВМ, например, разрабатывает ОС.
Язык считается тем более высокого уровня, чем более он близок к языку естественному, и считается тем более низкого уровня, чем он ближе к языкам, реализуемым аппаратно, машинным.
Охарактеризуем эти уровни алгоритмических языков:
языки запросов (непроцедурные языки) предназначены для осуществления диалога с некоторым пакетом прикладных программ, — это языки имитационного моделирования, в частности язык SLAM и др.;
языки высокого уровня (проблемно-ориентированные языки) предназначены для решения определенного, но достаточно широкого класса задач, например, вычислительного характера или обработки текстов (символов) — это, к примеру, языки FORTRAN, BASIC, LISP и др.;
ассемблеры (семейство языков), предназначены для укрупнения и символической (мнемонической) записи машинных команд;
языки микроопераций (языки разработки микропрограмм) — собственно говоря, это и есть языки машинных операций.
Языки по типу их использования и сферам применения можно делить условно на следующие типы (это – не полная их классификация):
языки процедурные;
языки непроцедурные;
языки функционального программирования;
языки моделирования;
языки аналитических преобразований;
языки эвристические;
языки описания, представления объектных языков или метаязыки.
Возможно и такое деление языков (отражающее характер их использования):
метаязыки, языки описания других языков;
языки описания, формулирования задач;
языки описания технологии, сценариев решения задач;
языки описания, разработки программ решения задач (или кодирования алгоритмов, часто вычислительного характера);
языки описания, представления знаний (фреймовые языки);
языки описания, представления данных;
языки описания, формулировки решений задач.
В мире разработано несколько тысяч языков различного назначения.
Пример. Отметим следующие языки, которые оказали наибольшее влияние и преемственность в развитии языков программирования:
ФОРТРАН, язык научно-технических расчетов, разработан в 1955 году фирмой IBM;
АЛГОЛ, язык вычислительного характера, разработан в 1960 году Международным комитетом ученых;
БЕЙСИК, простой язык для начинающих, разработан в 1965 году в Дортмунде;
ПАСКАЛЬ, разработан в качестве языка учебного и исследовательского характера в 1969 году в Цюрихе Н. Виртом;
СИ, разработан лабораторией BELL (США, 1972 г.) в качестве языка поддержки и программирования ОС UNIX;
ПРОЛОГ, язык логического программирования, разработан Колмероэ в 1971-1973 годах;
ПИТОН (ПАЙТОН), разработан в начале 1990-х годов Гвидо ван Россумом и является простым объектно-ориентированным языком, расширяемым, совершенствуемым пользователями;
JAVA – язык, ориентированный на сеть Интернет и серверы WWW; рассмотрим этот язык подробнее ниже;
HTML, предложен Тимом Бернерсом-Ли в 1989 году в качестве поддержки WWW-документов.
ЭВМ может исполнять программы, написанные на ее машинном языке, в машинных кодах. Для перевода с других языков на машинный язык составляется специальная программа, называемая транслятором . Алгоритм (программа на языке программирования) преобразуется в корректную последовательность команд и данных, загружаемых в память ЭВМ и выполняемых в ней аппаратно. Чем выше уровень используемого при составлении программы исходного языка, тем больше работ по трансляции программы. Транслятор переводит программу с исходного языка программирования на машинный язык загрузки ее в память и исполнения.
Существует два основных режима трансляции: компиляция и интерпретация. При интерпретации перевод на язык машины и выполнение каждой команды исходной программы осуществляется последовательно, покомандно, а полученная машинная программа пригодна только для одноразового решения задачи; данные вводятся при этом по мере трансляции. При компиляции до выполнения программы осуществляется полный перевод всей программы на машинный язык ЭВМ, затем полученная программа редактируется и загружается со всеми необходимыми для выполнения транслированной программы программами ОС в память ЭВМ и получается так называемый загрузочный модуль. Загрузочный модуль пригоден для многократного использования без повторной трансляции.
Пример. Язык Бейсик имеет трансляторы различного типа. Например, в среде TurboBasic (TBasic) – транслятор-интерпретатор, а в среде QuickBasic (QBasic) – транслятор-компилятор. Программа для TBasic интерпретируется по циклу: "ввод команды – перевод команды на внутренний машинный язык – ввод данных для данной команды – исполнение". Программа для QBasic компилируется по циклу: "перевод всех команд программы на внутренний язык – исправление ошибок в программе – ввод данных для программы – исполнение всей программы".