|
Расширенные Бэкуса-Наура формы (РБНФ).Date: 2015-10-07; view: 457. Метаязыки Хомского, Хомского-Щутценберже, Бэкуса-Наура позволяют описывать любой синтаксис, но для повышения удобства и компактности описания целесообразно ввести в язык дополнительные конструкции. Таким образом, были разработаны специальные метасимволы для описания необязательных цепочек, повторяющихся цепочек, обязательных альтернативных цепочек. Существуют различные расширенные формы метаязыков, незначительно отличающиеся друг от друга. Их разнообразие объясняется желанием разработчиков языков программирования по-своему описать создаваемый язык. Например, к таким широко известным метаязыкам относятся метаязык PL/I, метаязык Вирта, используемый при описании Модулы-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". $ идентификатор=буква {буква | цифра}.
|