Расширенные Бэкуса-Наура формы (РБНФ)

Метаязыки, представленные выше, позволяют описывать любой синтаксис. Однако, для повышения удобства и компактности описания, целесообразно вести в язык дополнительные конструкции. В частности, специальные метасимволы были разработаны для описания необязательных цепочек, повторяющихся цепочек, обязательных альтернативных цепочек. Существуют различные расширенные формы метаязыков, незначительно отличающиеся друг от друга. Их разнообразие зачастую объясняется желанием разработчиков языков программирования по-своему описать создаваемый язык. К примерам таких широко известных метаязыков можно отнести: метаязык PL/I, метаязык Вирта, используемый при описании Модулы-2, метаязык Кернигана-Ритчи, описывающий C см. приложение 2. Зачастую такие языки называются расширенными формами Бэкуса-Наура (РБНФ).

В частности, РБНФ, используемые Виртом, имеют следующие особенности:

· квадратные скобки "[" и "]" означают, что заключенная в них синтаксическая конструкция может отсутствовать;

· фигурные скобки "{" и "}" означают ее повторение (возможно, 0 раз);

· круглые скобки "(" и ")" используются для ограничения альтернативных конструкций;

· сочетание фигурных скобок и косой черты "{/" и "/}" используется для обозначения повторения один и более раз. Нетерминальные символы изображаются словами, выражающими их интуитивный смысл и написанными на русском языке.

Если нетерминал состоит из нескольких смысловых слов, то они должны быть написаны слитно. В этом случае для повышения удобства в восприятии фразы целесообразно каждое ее слово начинать с заглавной буквы или разделять слова во фразах символом подчеркивания. Терминальные символы изображаются словами, написанными буквами латинского алфавита (зарезервированные слова) или цепочками знаков, заключенными в кавычки. Синтаксическим правилам предшествует знак "$" в начале строки. Каждое правило оканчивается знаком "." (точка). Левая часть правила отделяется от правой знаком "=" (равно), а альтернативы - вертикальной чертой "|". Этот вариант РБНФ и будет использоваться для описания синтаксиса языков в лабораторной работе. В соответствии с данными правилами синтаксис идентификатора будет выглядеть следующим образом:

$ буква = "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".

$ идентификатор = буква {буква | цифра}.

2.2. Основы языка C++ Builder

Для передачи своих мыслей человек использует речь в устной или письменной форме. Если в письменной, то необходимо знать буквы, чтобы составить слова, также и грамматические правила для точной передачи мысли в виде предложения. Программа, составленная программистом – продукт позволяющий реализацию его мыслей в виде текста, поэтому начнем с рассмотрения алфавита языка C++ Builder

2.2.1. Алфавит языка C++ Builder

Алфавит языка C++ Builder включает:

· 26 строчных, 26 заглавных символов латинского алфавита и символ подчеркивания «_»;

· Арабские числа 0..9;

· Следующие последовательности специальных символов и букв алфавита см. таблицу 2.1. образуют множество символов операций (часть из них в зависимости от контекста может быть использована в качестве разделителей):

Таблица 2.1.

Специальные символы, используемые вC, C++ и C++ Builder

, ! != | |= % %= &
&& &= () * *= + ++ +=
- -- -= -> ->* . .* /
/= :: < << <= <<= > >>
>= >>= == ?: [] ^ ^= ~
|| # ## sizeof new delete typeid throw

Замечание! Символы строчные и заглавные в записях на языке C++ Builder значимы в отличие от языка Паскаль и некоторых других языков.








Дата добавления: 2015-10-09; просмотров: 1023;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.