Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО Часть 1.docx
Скачиваний:
25
Добавлен:
25.04.2019
Размер:
133.36 Кб
Скачать

Часть 1

  1. Строка символов: определение, основные операции обработки

Строка (цепочка) символов – произвольная последовательность символов, записанных один за другим.

Две цепочки α и β равны между собой, если они состоят из одних и тех же символов, находящихся в одной и той же последовательности.

|α| - длина цепочки

n = |α|

α = β => |α| = |β|

Конкатенация: α + β = αβ

αβ ≠ βα

Операция называется заменой или подстановкой, если какая-то цепочка разбивается на составляющие подцепочки, а затем одна подцепочек заменяется любой произвольной цепочкой символов.

Пустая цепочка: |λ| = 0

αλ = λα

  1. Язык: определение, основные элементы, способы задания

Язык – это заданный набор символов (алфавит) и правил, устанавливающих способы комбинирования этих символов для записи осмысленных текстов (синтаксис).

Алфавит – счетное множество допустимых символов.

α(V) – цепочка над алфавитом V (составленная из символов алфавита V)

V+ – множество всех цепочек, составленных на основании алфавита V и не включающих пустой символ.

V* – множество, включающее пустой символ (V* = V+∪λ)

Язык – это некоторое счетное подмножество цепочек конечной длины из множества всех цепочек над алфавитом V.

L(V) ⊆ V*

Способы задания языка:

  • Перечисление всех допустимых цепочек языка

  • Задание метода порождения правильных цепочек

  • Определение метода распознавания правильных цепочек

Первый метод на практике не применяется.

Второй метод – правила создания правильных цепочек.

Третий метод реализуется в трансляторах.

Для того чтобы реализовать третий способ, надо формально описать язык:

  1. Описание алфавита

  2. Лексика – словарный запас языка

  3. Синтаксис – набор правил, определяющих допустимые конструкции языка

  4. Семантика – раздел языка, определяющий значение частей предложений языка (система правил истолкования отдельных языковых конструкций)

Синтаксически правильная программа имеет смысл, если можно:

  • изложить ее на другом языке программирования

  • описать ее на естественном языке в виде комментария

  • представить алгоритм в виде блок-схемы

  • выполнить на машине Тьюринга

  1. Грамматика языка: определение, способы задания

Грамматика – это описание способа построения предложений некоторого языка. Задание грамматики – это задание правил порождения цепочек символов, принадлежащих языку.

Продукция – это упорядоченная пара цепочек, которая записывается: α→β (α::=β) и расшифровывается: «α порождает β» или «β по определению есть α»

Любая грамматика включает:

  • Описание синтаксических конструкций языка

  • Определение семантических ограничений

Описание синтаксиса:

  1. Форма Бэкуса-Наура.

G = (VT, VN, P, S)

VT – множество терминальных символов (алфавит)

VN – множество нетерминальных символов (VN∩VT = ∅). Используются для промежуточных шагов при построении дерева разбора.

P – множество продукций грамматики: P = {α→β}, α∈V+, β∈V*

S – целевой символ грамматики: S∈VN. Является корневым символом при создании дерева разбора.

V = VN∪VT – полный алфавит грамматики

Терминальные символы могут встречаться и в левой, и в правой части продукции α→β, но если они стоят в левой части, то должны дублироваться в правой. Нетерминальные символы обязательно встречаются

Если есть набор α→β1, α→β2, …, α→βn, то α→β12|…|βn

G = ({0,1,2,3,4,5,6,7,8,9,+,-}, {<число>, <знак>, <цифра>, <числовая константа (ЧК)>}, P, <число>)

P:

<число>→<ЧК>|<знак><ЧК>

<знак>→+|-

<ЧК>→<цифра>|<ЧК><цифра>

<цифра>→0|1|2|3|4|5|6|7|8|9

(необязательно) Повторения бывают двух видов:

  • Итерация

  • Рекурсия – бесконечное множество возможных цепочек языка. Может быть явной, когда нетерминальный символ определяется через себя в одном правиле, и неявной.

  1. Язык метасимволов.

{} – бесконечное число повторений

{}16, {}0 – диапазон

[] – необязательный элемент

( , , ) – исключающее «или»

P:

<число>→[(+,-)]<цифра>{<цифра>}

<цифра>→(0,1,2,3,4,5,6,7,8,9)

Или:

<число>→[<знак>]<цифра>{<цифра>}

<знак>→(+,-)