5. Способы описания языков программирования
Напомним несколько определений.
Язык программирования – это система обозначений и понятий для описания структур данных и алгоритмов.
Алфавит языка – набор символов, которые разрешено использовать.
Синтаксис – система правил, по которым записываются конструкции языка.
Семантика – набор правил, на основе которых следует истолковывать эти конструкции.
Не случайно используются термины «система правил» и «набор правил», некоторое различие здесь имеется.
Идеального способа описания языка программирования пока не найдено. Одна из причин
– неоднозначность конструкций естественных языков, которые используются при этом.
Кроме того, трудности описания языков программирования связаны с интересами субъектов: авторы языка стремятся изложить свои идеи строго, лаконично и красиво, разработчиков транслятора интересует совсем другое в описании языка – как быстрее и эффективнее анализировать исходный текст, а программистам хочется программировать, а не тратить время на изучение документации.
Различают неформальное и формальное описание языков программирования. В учебниках, как правило, изложение неформальное: можно писать так, а можно немного по-другому. Вот примеры, mach mit, mach wie, mach besser ☺. Формальное описание языка требует больших усилий.
Обычно все начинается с описания синтаксиса. Для этого используются некоторый вспомогательный язык – метаязык. Наиболее часто используются следующие способы описания языков программирования:
нотация Бэкуса-Наура
синтаксические диаграммы Вирта
формальные грамматики
5.1. Нотация Бэкуса-Наура
Этот способ описания языков программирования был предложен в начале 1960-х годов
(Дж. Бэкус – главный разработчик компилятора для языка Фортран, П.Наур – один из авторов языка Алгол-60).
Рассмотрим фрагмент текста, написанный на исторически первом метаязыке:
<целое число> ::= <целое без знака> | + < целое без знака >
| – < целое без знака >
<целое без знака> ::= <цифра> | <целое без знака> <цифра>
<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<идентификатор> ::= <буква> | <идентификатор> <буква> | <идентификатор>
<цифра> | <идентификатор> _
Напомним несколько определений.
Язык программирования – это система обозначений и понятий для описания структур данных и алгоритмов.
Алфавит языка – набор символов, которые разрешено использовать.
Синтаксис – система правил, по которым записываются конструкции языка.
Семантика – набор правил, на основе которых следует истолковывать эти конструкции.
Не случайно используются термины «система правил» и «набор правил», некоторое различие здесь имеется.
Идеального способа описания языка программирования пока не найдено. Одна из причин
– неоднозначность конструкций естественных языков, которые используются при этом.
Кроме того, трудности описания языков программирования связаны с интересами субъектов: авторы языка стремятся изложить свои идеи строго, лаконично и красиво, разработчиков транслятора интересует совсем другое в описании языка – как быстрее и эффективнее анализировать исходный текст, а программистам хочется программировать, а не тратить время на изучение документации.
Различают неформальное и формальное описание языков программирования. В учебниках, как правило, изложение неформальное: можно писать так, а можно немного по-другому. Вот примеры, mach mit, mach wie, mach besser ☺. Формальное описание языка требует больших усилий.
Обычно все начинается с описания синтаксиса. Для этого используются некоторый вспомогательный язык – метаязык. Наиболее часто используются следующие способы описания языков программирования:
нотация Бэкуса-Наура
синтаксические диаграммы Вирта
формальные грамматики
5.1. Нотация Бэкуса-Наура
Этот способ описания языков программирования был предложен в начале 1960-х годов
(Дж. Бэкус – главный разработчик компилятора для языка Фортран, П.Наур – один из авторов языка Алгол-60).
Рассмотрим фрагмент текста, написанный на исторически первом метаязыке:
<целое число> ::= <целое без знака> | + < целое без знака >
| – < целое без знака >
<целое без знака> ::= <цифра> | <целое без знака> <цифра>
<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<идентификатор> ::= <буква> | <идентификатор> <буква> | <идентификатор>
<цифра> | <идентификатор> _
Поделитесь с Вашими друзьями: