Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Синтаксис Pascal-программы
Программа CopyChar – всего лишь пример последовательности символов, удовлетворяющей правилам синтаксиса языка Pascal. Правила определяют элементы программ (это что-то вроде частей речи в русском языке) при помощи синтаксических категорий, а также показывают, как элементы программ попадают в эти категории. Синтаксические элементы могут быть описаны по правилам грамматики в нотации BNF (Backus-Naur Form) названной по имени компьютерных ученых, которые вместе с другими учеными участвовали в разработке языка ALGOL-60 – концептуальным предшественником языка Паскаль. Синтаксические элементы записываются в виде слова или фразы внутри угловых скобок (< …>) и определяются при помощи правила, которое может относиться к другим синтаксическим элементам.
Правило 1 определяется часть синтаксического элемента «программа».
SR1. < программа>:: = < заголовок>; < блок >.
Синтаксическое правило 1 утверждает, что синтаксический элемент < программа > может быть составлен из синтаксического элемента < заголовок >, следующей за ней точки с запятой, синтаксического элемента < блок > и последующей точки. Угловые скобки, заключающие в себе названия других синтаксических элементов, означают, что каждый из этих элементов также определяются синтаксическим правилом. Правило 1 определяет элемент < программа >, тогда как < заголовок > и < блок > будут определены при помощи других правил. Точка с запятой и точка – это синтаксические литералы или строки символов, которые должны присутствовать именно в том виде, в каком они показаны. Символ :: = означает «является любым примером». Синтаксическое правило 1 читается так: < программа> является любым примером < заголовка >, последующей точки с запятой, последующего < блока>, последующей точки. Символы :: = и угловые скобки < > являются метасимволами, поскольку они не являются частью определяемого языка. Ни:: =, ни < программа> не могут присутствовать в Пасколь программы, за исключением, возможно, комментариев. В случае программы CopyChar последовательность символов
PROGRAM CopyChar(INPUT, OUTPUT) соответствует синтаксической части < заголовок>, а последовательность:
VAR Ch: CHAR; BEGIN READ(Ch); WRITELN(Ch); END соответствует синтаксической части < блок>.
Для того, чтобы вся программа соответствовала синтаксической части < программа >, надо вставить точку с запятой после заголовка и точку после части < блок>, как это указано в синтаксическом правиле 1. Мы будем говорить об элементах программ, говоря о том какая последовательность символов какому синтаксическому элементу соответствует, и затем будет ссылаться к данной последовательности символов по имени элемента.
Синтаксическое правило 2 определяет синтаксический элемент < заголовок>.
SR2. < заголовок>:: = PROGRAM < идентификатор> (INPUT, OUTPUT) Заголовок начинается с символьной последовательности PROGRAM, последующего < идентификатора > и символьной строки (INPUT, OUTPUT). В программе CopyChar, < идентификатором> является последовательность сама символов CopyChar. Стандартные слова вроде PROGRAM и < идентификатор> должны бать разделены друг от друга как минимум одним пробелом, в том случае, когда между ними не находится знак препинания вроде точки с запятой. В синтаксических правилах пробелы никогда явно не показываются. Пробелы используются в них только для того, чтобы повысить их читаемость. В тех случаях, когда может быть вставлен один пробел, может быть использовано любое их количество пробелов. Символ конца строки может заменить собой любой пробел. < Идентификатором> является любая последовательность символов, которая начинается с буквы, за которой может следовать любое (0 или больше) количество букв и/или цифр, без пробелов и других символов. Синтаксическое правило 3 задает определение идентификатора, используя два новых понятия. Во первых – это вертикальная черта | которая означает «или». Во вторых, данное правило использует в определении синтаксического элемента тот же самый синтаксический элемент. Вертикальная черта – это другой метасимвол, в данных синтаксических правилах. SR3. < идентификатор>:: = < буква> | < идентификатор> < буква> | < идентификатор> < цифра> Данное правило читается так: < Идентификатором> является < буква>, либо (другой) < идентификатор>, за которым следует < буква>, либо (другой) < идентификатор>, за которым следует < цифра>. Каждый возможный вариант в таком правиле называется альтернативой правила. В том случае, когда нам будет необходимо сослаться на одну из альтернатив, мы будем пользоваться нотацией Dewey. Например, правило SR3 имеет первую альтернативу 3.1 (< буква>), и две другие альтернативы 3.2 и 3.3. Короче говоря, синтаксическое правило SR3 гласит, что любая буква или цифра, добавленная в конец < идентификатора> создает новый < идентификатор>. Правило 3.1 определяет < идентификатор> как единственную букву, а правила 3.2 и 3.3 определяют < идентификаторы> длиной более одного символа в терминах < идентификаторов> меньшей длины.
SR4. < буква>: = 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 | | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z SR5. < цифра >: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Альтернатива 4.7, например, позволяет < букве> быть равной (например) равной G.
Теперь, используя эти определения мы можем построить < идентификатор> CopyChar по одному символу за раз:
Подобным образом последовательности символов Copy1, XxXxX, One4Two являются < идентификаторами>.
Поскольку пробелы встречаются в синтаксических правилах только для улучшения читаемости, они не могут встречаться внутри < идентификаторов>
Почему ниже перечисленные символьные строки не являются идентификаторами?
|