Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЯПиМТ (методичка).doc
Скачиваний:
4
Добавлен:
16.11.2019
Размер:
150.02 Кб
Скачать

3.4. Характерные задачи

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

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

3.5. Характеристика языковых категорий

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

Например. Программа состоит из заголовка, раздела описания переменных и исполняемой части. Исполняемая часть программы состоит из последовательности операторов.

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

Для хранения промежуточных результатов вычислений и для управления ходом вычислительного процесса имеются переменные. Обращение к переменным ведется по их идентификаторам. В качестве идентификаторов нельзя использовать ключевые слова. В языке имеется всего один тип переменных – “INTEGER”. Он используется для хранения целых чисел. Константы также имеются только целого типа. Встроенных констант в языке нет.

Для задания алгебраических действий служат знаки операций.

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

Для ввода и вывода значений во время работы программы служат операторы ввода и вывода.

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

Разделители служат для разделения исходного текста программы на лексемы во время лексического анализа и для формирования структуры операторов и программы.

4. Алфавит

Приводятся списки символов языка по следующим категориям:

  • ключевые слова;

  • идентификаторы;

  • константы для каждого типа;

  • значащие разделители;

  • незначащие разделители.

Например.

Ключевые слова: “BEGIN”, “DO”, “DIV”, “END”, “END.”, “FOR”, “INTEGER”, “PROGRAM”, “READ”, “TO”, “VAR”, “WRITE”.

Идентификаторы программ и переменных могут содержать заглавные буквы латинского алфавита (“A”..“Z”), цифры (“0”..“9”) и знак подчеркивания (“_”). Начинаться идентификатор должен с буквы или знака подчеркивания.

Константы целого типа определим с помощью конечного автомата:

1,2,3,4,5,6,7,8,9

1,2,3,4,5,6,7,8,9

0,1,2,3,4,5,6,7,8,9

-

Значащие разделители: “+”, “–“, “*”, “:=”, “(“, “)”, “;”, “:”, “,”.

Незначащие разделители: пробел, символы конца строки, символ табуляции, комментарий.

Комментарий: начинается со знака “{” и заканчивается знаком “}”, между ними могут быть любые символы кроме “}”.

5. Синтаксис языка

В этом пункте описывается грамматика языка с помощью нотации Бэкуса-Наура. Рекомендуется расширенная нормальная форма Бэкуса (РНФБ).

Основными классами объектов, которые используются в РНФБ, являются символы основного (терминального) алфавита и имена конструкций описываемого языка в виде металингвистических переменных.

Описание грамматики состоит из совокупности металингвистических формул, каждая из которых описывает правила построения некоторой конструкции языка и состоит из двух частей. В левой части находится металингвистическая переменная, которая обозначает соответствующую конструкцию. Затем идет связка = , которая означает "определяется как". В правой части формулы задается способ построения конструкции, определенной в левой части.

Согласно РНФБ для обозначения повторов используются фигурные скобки {…}, для обозначения вариантов – знак | , для группирования альтернатив – круглые скобки (…), а для обозначения факультативных элементов – квадратные скобки […]. Металингвистические переменные не выделяются, а терминальные символы заключаются в кавычки.

Для перечислимых вариантов символов терминального алфавита, когда их состав очевиден, можно все элементы упорядоченного множества символов не приводить, ставя две точки .. между первым и последним вариантом.

Все эти правила позволяют определять синтаксис РНФБ с помощью самой РНФБ.

Описание необходимо строить «в глубину». Название нетерминальных символов лучше давать на русском языке и делать их настолько длинными, насколько это необходимо для понимания их смысла. При необходимости давать рядом комментарии для пояснения. Другое дело терминальные символы – они должны быть по возможности лаконичными.

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

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

Например.

1 prog = “PROGRAM” prog_name “VAR” dec_list “BEGIN” stmt_list “END.”

2 prog_name = id

3 dec_list = dec { “;” dec }

4 dec = id_list “:” type

5 id_list = id {“,” id }

6 type = “INTEGER”

7 stmt_list = stmt {“;” stmt}

8 stmt = assign | read | write | for

9 assign = id “:=” exp

10 exp = term { (“+”|“–”) term }

11 term = factor { (“*”|“DIV”) factor }

12 factor = id | int | “(” exp “)”

13 read = “READ” “(” id_list “)”

14 write = “WRITE” “(” id_list “)”

15 for = “FOR” index_exp “DO” body

16 index_exp = id “:=” exp “TO” exp

17 body = stmt | “BEGIN” stmt_list “END”

Примечания. Лексемы id (идентификатор) и int (константа целого типа) распознаются во время сканирования, а не во время синтаксического разбора. Их синтаксис определен в п. 4.