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

4.5. Способы описания синтаксиса

Синтаксис – это набор правил и соглашений, описывающих правильные предложения языка. Для записи правил синтаксиса языков программирования применяют различные формализованные системы обозначений, называемые метаязыками . Мы рассмотрим два метаязыка, широко используемых для описания синтаксиса языка Паскаль: 1) язык металингвистических формул. Одна из его разновидностей – это расширенная форма Бэкуса-Наура (РБНФ); 2) синтаксические диаграммы. 4.5.1. Расширенная форма Бэкуса-Наура (РБНФ) В метаязыках, описывающих синтаксис языка программирования, используются следующие понятия: метапеременная, метаконстанта, синтаксическая единица и метасимвол. Метапеременная – это определенная синтаксисом конструкция языка (исключая основные символы). Для записи метапеременных используются последовательности слов русского языка и служебных слов, между которыми находится символ подчеркивания. Метапеременные при записи заключаются в угловые скобки. Примеры записи метапеременных: <Шестн._цифра> 91

<Объявление_переменных>Метаконстанта – это лексема языка программирования. В программе метаконстанте соответствует она сама. В РБНФ метаконстанты заключаются в кавычки. Примеры метаконстант: “End” “+” “For” Синтаксическая единица – это строка, описывающая состав и порядок следования элементов конструкций языка программирования. Синтаксическая единица состоит из метапеременных, метаконстант и метасимволов. Метапеременная в синтаксической диаграмме означает, что соответствующий фрагмент диаграммы должен быть детализирован подстановкой синтаксической диаграммы с именем, соответствующим данной метапеременной. Метасимволы – специальные символы, используемые в метаязыках для

описания синтаксиса языков программирования.
В РБНФ используется следующий набор метасимволов;
а) = (или ::= ) имеет смысл «определяется как», «по определению
есть»; справа от знака ::= записывается синтаксическая единица,
б) . слева – метапеременная;
точка; обозначает конец определения;
в) | вертикальная черта; обозначает выбор, альтернативу (смысл
эквивалентен словам «либо», «или»);
г) фигурные скобки; означают возможность повторения
заключенной в них конструкции ноль, один или более раз;
[ ] например, >;
д) квадратные скобки; обозначают необязательную часть
конструкции, т.е. возможность повторения заключенной в них
конструкции ноль или ровно один раз; например, запись [“+”]
( | ) означает, что знак + перед числом может писаться или нет;
е) круглые скобки вместе с используемой внутри них вертикальной
чертой; означают альтернативы внутри определения,

заключенного в скобки; например, запись (“X”|“Y”|. |“Z”) означает вхождение в конструкцию элемента “X” или “Y” или . “Z” . Рассмотрим простейшие примеры записи в РБНФ. 92
Пример 4.2. Вспомним, что идентификатор – по определению – последовательность латинских букв, цифр и знаков подчеркивания, начинающаяся с буквы или символа подчеркивания. В РБНФ это определение может быть представлено так: <Идентификатор>::= ( | ) <| | > . ::= “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” | “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” . ::= “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9” . ::= “ _ ” . Пример 4.3. Запись в РБНФ синтаксиса комментария. ::= “>>“>” .

Здесь:
внутренние < >− часть метапеременной;
средние < >− метасимволы, означающие любое количество
наружние “” − повторений заключенной в них метапеременной;
основные символы языка Паскаль (метаконстанты),
относящиеся к его алфавиту; они заключены в РБНФ
в кавычки, чтобы отличить их от метасимволов.
Если учесть, что альтернативой символам в ограничении
комментария являются (* *) , то запись в РБНФ синтаксиса комментария
будет иметь вид:

::= (“_(*_*)>>( “>” | “*)”) . 93

4.5.2. Синтаксические диаграммы

Синтаксическая диаграмма графически изображает структуру синтаксической единицы. Каждая синтаксическая диаграмма имеет имя, в качестве которого используется соответствующая метапеременная. Синтаксическая диаграмма представляет собой ориентированный граф с размеченными ребрами. Для разметки ребер используются метапеременные и метаконстанты. Метасимволы на синтаксической диаграмме не используются. Поэтому метаконстанты в синтаксических диаграммах в кавычки не заключаются. Метапеременные заключаются в угловые скобки < >. Для отделения имени синтаксической диаграммы от графа используется метасимвол ::= . Символы < >и ::= являются единственными используемыми метасимволами. Метапеременная на размеченном ребре графа означает, что соответствующий фрагмент диаграммы должен быть детализирован подстановкой синтаксической диаграммы с именем, соответствующим данной метапеременной. Ниже рассмотрено представление в виде ориентированных графов некоторых из метасимволов языка РБНФ. 1) Выбору, альтернативе (метасимволу | (Или)) соответствует разветвление в синтаксической диаграмме с последующим объединением. Например, переменная может принимать значение А или В ( А, В – это лексемы языка Паскаль, т.е. метаконстанты). В виде синтаксической диаграммы это запишется так, как представляет рисунок 4.2. <Переменная>::= А В Рисунок 4.2 – Синтаксическая диаграмма, представляющая выбор В РБНФ это будет записано так: <Переменная>::= “A”|”B” . 94

В данном случае <Переменная>— это имя синтаксической диаграммы. Вход синтаксической диаграммы находится слева, выход – справа. Стрелки указывают возможных преемников каждого из элементов диаграммы. Основное направление ребер графа – слева направо и сверху вниз. 2) Необязательной части конструкции (повторению ноль или один раз , т.е. метасимволам [ ] ) соответствует диаграмма, которую представляет рисунок 4.3. <Переменная> Рисунок 4.3 – Синтаксическая диаграмма, представляющая необязательную часть конструкции Это соответствует записи в РБНФ: [<Переменная>] . 3) Возможности повторения конструкций ноль, один или более раз (метасимволам < >) соответствует фрагмент синтаксической диаграммы, который представляет рисунок 4.4. <Переменная> Рисунок 4.4 – Синтаксическая диаграмма, представляющая возможность повторения конструкций <Переменная>ноль, один или более раз Это соответствует записи в РБНФ: > . 95

Источник

4… Способы описания языков программирования: бнф-нотации, синтаксические диаграммы

Языки программирования- это формальные языки и для их записи используют различные способы. В процсс разработки языка была разработана Бэкиса-Наурова форма (БНФ-нотация) для записи. БНФ в послдствии стала универсальным средством описания любых формальных языков. Был разработан языка Pascal, используя синтаксические программы.

В силу своей неоднозначности представлений, возможности парадоксальных предложений в зависимости синтаксиса от семантики. Но внутри естественных языков могут быть выделены подмножества предложения, которые однозначны. И однозначность достигается запретом говорить о самих себе. Язык, который описывают, называют языком — объектом. Описывающий язык – метаязык.

Язык описывающий синтаксис другого языка, называется метасинтаксический, а описывающий семантику – метасемантическим.

БНФ-нотация – это метасинтаксический язык, описывающий синтаксис языков программирования, однако не всё можно описать с помощью БНФ. Существуют контекстно-зависимые условия, для описания которых необходимы зависимые свойства.

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

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

Для записи конструкции языка с помощью БНФ используют определенные метосимволы и понятия регулярного выражения.

::= Метасимволы по определению есть

RQ Конкатенация регулярного выражения

регулярное выражение или значение пусто

+ регулярное выражение хотя бы один раз

* регулярное выражение повторенное многократно

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

1)Записываются терминальные символы

2)Не терминальные символы для которых

нужно создать синтаксически диаграммы

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

5… Классификация языков программирования, элементы языка программирования С/С++: алфавит, слова, константы.

Классификация языков программирования

Машинный язык — это я3ык данного процессора, любой компьютер может выполнить программу только на своём я3ыке,когда программа представляет собой последовательность команд, а команда – это цифровой код – последовательность нулей и единиц.

Машинно-ориентированный я3ык – это я3ык , который в своей конструкции содержит,исполь3ует элементы архитектуры данного процессора. Такая программа может быть выполнена только на процессоре определённого типа.

Машинно-не3ависимые я3ыки никак не 3ависят от архитектуры процессора и программа, написанная на таком я3ыке может быть выполнена на любом процессоре, если в состав программного обеспечения входит специальная программа-транслятор, способная перевести с машинно-не3ависимого я3ыка на машинный.

Функциональные я3ыки ба3ируются на понятии функции, все вычисления,преобра3ования,и управления реали3уются с помощью стандартных функций или со3данных программистом.

ЭЛЕМЕНТЫ Я3ЫКА ПРОГРАММИРОВАНИЯ

Любой я3ык программирования определяется алфавитом, синтаксисом, семантикой.

Алфавит- фиксированный набор 3наковых символов,исполь3уемых в я3ыке.

Лексема – синтаксическая единица, составленная и3 символов алфавита, которая имеет смысл.

Выражение строится и3 лексем и символов и 3адаёт правило вычисления следующего 3начения.

Оператор – обра3уется и3 символов, лексем и выражений и является описанием некоторого действия.

Синтаксис определяет правила построения конструкций я3ыка – лексем, выражений.

Семантика – это правила исполь3рвания конструкций я3ыка и правила исполнения программ.

Алфавит С++ включает в себя 3аглавные и строчные латинские буквы, рабочие цифры и символы.

Служебные слова – слова,3аре3ервированные в я3ыке для определённого исполь3ования , их кол-во ограничено.

Константами — на3ываются данные, которые не и3меняются в процессе выполнения программы . В С++ можно исполь3овать именованные и неименованные константы.

Неименованные константы, или литералы – это обычные фиксированные 3начения.

Ра3личаются целые, вещественные, символьные и строковые литералы.

Если при решении 3адачи исполь3уются постоянные 3начения,имеющие смысл для этой 3адачи,то в программе можно определить их как именованные константы. Формат объявления именованной константы:

[] const< тип>< имя именованной константы>=< выражение>;где класс памяти – это спецификатор, определяющий время жи3ни и область видимости программного объекта; выражение определяет 3начение именованной константы, т.е инициализирует её.

6… Переменные и операции в C++, выражения, порядок вычисления выражений.

Переменная – это именованная область памяти, в которой хранятся данные определённого типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Во время выполнения программы, значение переменой можно изменять. Перед использованием любая переменная должная быть описана. Например int i,j;

Перед использованием значение любой переменной должно быть определено. Это можно сделать с помощью:

  1. Оператора присваивания: int a; … a=10;
  2. Оператора ввода: int a; … cin>>a;
  3. Инициализации ( определении значения переменной на этапе описания )
  1. Операции увеличения и уменьшения на 1 (++ и —).
  1. Операция определения размера (sizeof).
  1. Операции отрицания(-,!).
  1. Арифметические операции.
  1. Умножение(*), деление(/), остаток от деления(%);
  2. Сложение(+), вычитание(-).
  1. Тип возвращаемого значения;
  2. Имя функции;
  3. Список параметров, заключенный в круглые скобки (может быть пустым)
  4. Тело функции (последовательность операторов), которое помещается в фигурные скобки.
  1. Тип возвращаемого значения int – целый;
  2. Имя функции main;
  3. Список параметров пуст;
  4. Тело функции состоит из одного оператора return 0, который возвратит значение 0 вызываещему окружению (либо компилятору, либо операционной системе).

Источник

Читайте также:  Пример решения задачи линейного программирования двойственная задача
Оцените статью