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

Лабораторная работа N2

Средства описания алгоритмических языков

Цель работы: Ознакомление с методами описания алгоритми-

ческих языков. Приобретение навыков использо-

вания грамматик в форме метаформул БНФ и син-

таксических диаграмм для порождения и

распознавания конструкций алгоритмических

языков.

1. Теоретическое введение

Каждый алгоритмический язык включает три составляющие: ал-

фавит, синтаксис и семантику.

 _Алфавит . - это фиксированный для данного языка набор основ-

ных символов, т.е. "букв алфавита", из которого должен состоять

любой текст на этом языке - никакие другие символы не допуска-

ются.

 _Синтаксис . определяет состав допустимых конструций языка и

форму их сочетаний при записи алгоритма решения задачи.

 _Семантика . - система правил, приписывающих конструкциям

языка определенный смысл.

Для описания алгоритмического языка, в свою очередь, тре-

буется некоторый дополнительный "надъязык". Таким языком мог бы

служить естественный (русский) язык. Однако, его удается ис-

пользовать только для описания семантики языка. Для описания же

синтакса естественный язык не подходит, поскольку не обеспечи-

вает однозначного толкования определяемых понятий алгоритмичес-

кого языка. Поэтому, для строгого и точного описании синтаксиса

алгоритмических языков используются специальные формальные язы-

ки, называемые  _метаязыками ..

Описание синтаксиса представляет собой набор определений

всех понятий языка, которые могут приводиться как в аналитичес-

кой, так и в графической формах.

- 2 -

1.1. Аналитический метаязык

Из аналитических метаязыков наиболее распрастранен язык,

предложенный Бэкусом и Науром. На нем каждое понятие определя-

ется с помощью правила, имеющего вид

< Y > ::= X

В левой части правила в угловых скобках указывается название

определяемого понятия Y. Далее ставится знак "::=", означающий

"по определению есть", и, наконец, записывается само определе-

ние X в виде совокупности возможных символов языка и названий

более простых понятий. Предполагается, что символы "<", ">" и

"::=" не принадлежат алфавиту определяемого языка, т.е. являют-

ся метасимволами.

Поскольку такие определения понятий напоминают математи-

ческие формулы, то правила также называют металингвистическими

формулами, а метаязык - языком металингвистических формул Бэку-

са-Наура (БНФ). При такой интерпретации правил определяемые по-

нятия рассматриваются как металингвистические переменные, а

правые части правил - как описание множества принимаемых ими

значений. Кроме переменных в метаязыке имеются и металингвисти-

ческие константы, в качестве которых выступают буквы алфавита и

составленные из них конкретные слова.

В простейшем случае метапеременную, также как и в матема-

тике, можно определить перечислением возможных ее "значений".

На языке БНФ эти "значения", называемые также альтернативами,

записывают в правой части правила, разделяя метасимволами "│",

означающими "или". Так, понятие "десятичная цифра" можно опре-

делить следующим образом:

<десятичная цифра>::=0│1│2│3│4│5│6│7│8│9

В данном случае 0,1,...,9 есть "значения" понятия "десятичная

цифра". Аналогично, правило

<буква>::=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

означает, что понятие "буква" может принимать 26 различных зна-

чений, каждым из которых является заглавная буква латинского

алфавита.

Может показаться, что с помощью перечисления определяются

только односимвольные конструкции языка. Очевидно, что это не-

верно, поскольку в правой части правила перечисляются варианты

- 3 -

значения понятия, т.е. металингвистические константы, к кото-

рым, в частности, относятся и слова языка, составленные из букв

алфавита. Для примера приведем определение знака отношения, ис-

пользуемое в языках программирования

<знак отношения>::=<│>│=│<=│>=│<>

В этом определении три последних знака двухсимвольные, так как

на клавиатуре дисплея ПЭВМ отсутствуют соответствующие матема-

тические знаки. По той же причине односимвольные математические

знаки логических операций в языках программирования переопреде-

ляются как следующие слова

<знак логической операции>::=not│and│or

Кроме констант в правой части можно записывать и перемен-

ные, т.е. ранее определенные понятия, как в следующем правиле

для шестнадцатеричной цифры:

<шестнадцатеричная цифра>::=<десятичная цифра>│A│B│C│D│E│F

Очевидно, прием перечисления полезен для определения лишь

простейших понятий языка. Далее, приняв их в качестве первич-

ных, необходимо определить более сложные понятия, через них

следующие и т.д.

Одним из способов определения новой конструкции языка яв-

ляется представление ее в виде последовательности из некоторого

числа более простых конструкций. Так, например конструкцию

"дробное число" можно представить как целую часть, точку и

дробную часть, следующих друг за другом в указанном порядке.

Язык БНФ предоставляет удобный способ опрделения такой конс-

трукции языка: в правой части правила необходимо просто выпи-

сать в заданной последовательности те понятия, через которые

определяется новое понятие. Так, правило для дробного числа

должно иметь вид

<дробное число>::=<целая часть>.<дробная часть>

При чтении правой части правила между ее элементами, являющими-

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

союз "и", имеющий смысл "за которым(ой) следует". Поэтому, при-

веденное правило читается следующим образом: "дробное число по

определению есть целая часть и точка, и дробная часть".

Описанный прием может использоваться в сочетании с приемом

перечисления, когда необходимо в одном правиле указать несколь-

ко варианов построения новой конструкции языка. Покажем это на

- 4 -

примере правила для имени переменной, которое в ранних версиях

языка Бейсик определялось как буква, за которой могла следовать

цифра. Данное определение переформулируем так, чтобы явно выде-

лились два способа образования имени. В результате получим:

"имя по определению есть буква или буква, за которой следует

цифра". Если в полученном определении часть предложения ", за

которой следует" заменить на союз "и", то получим определение

"имя по определению есть буква или буква и цифра", по которому

можно восстановить соответсвующее правило:

<имя>::=<буква>│<буква><цифра>

Расмотренные приемы позволяют определять понятия, значени-

ями которых являются цепочки символов конечной длины.

Перейдем к рассмотрению принципов построения металингвис-

тических формул для определения понятий, значениями которых

являются цепочки переменной длины. С этой целью возьмем такое

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

всего одно его значение, например 795. При этом будем следить

за каждым своим шагом, чтобы выявить в выполняемых действиях

некоторую закономерность.

Так, начиная запись числа с цифры 7, попытаемся предста-

вить металингвистическую формулу, которую мы при этом подразу-

меваем. Очевидно, это следующая формула

<целое положительное число>::=<десятичная цифра>

поскольку запись любого целого положительного числа начинается с

цифры. Причем, ее применение дает одноразрядное число 7, но не

цифру 7!

Вторая цифра 9 записывается за уже имеющимся числом 7,

т.е. здесь подразумевается правило вида

<целое положительное число>::=

<целое положительное число><десятичная цифра>

Его применение дает целое положительное число 79. Третья цифра