Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Синтаксис Pascal-программы




НАПИСАНИЕ ПРОГРАММ НА ЯЗЫКЕ CF-PASCAL

 

В этом разделе мы узнаем о том, как писать простые программы на языке CF-Pascal, проверять корректность синтаксиса и использовать принципы проектирования и разработки программ в процессе пошагового совершенствования написания, исполнения и тестирования простейших программ.

 

Введение в синтаксис языка CF-Pascal

 

Программы CFPascal составляются в соответствии с четко заданным синтаксисом. Точный набор правил определяет синтаксис программ и процедуры его проверки.

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

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

Аналогично, для того, чтобы писать на CF-Pascal, тоже необходимо овладеть синтаксисом, чтобы быть способным писать операторы и составлять с их использованием программы. Однако CF-Pascal является формальным языком с четко заданным набором синтаксических правил. Эти правила позволяют изучить синтаксис языка гораздо быстрее и полнее, чем это возможно в случае естественных языков. Изучив синтаксис языка, можно смело переходить к вопросу о том, как писать программы для решения предстоящих задач.

Паскаль-машина рассматривает Паскаль-программу как последовательность символов. Люди, в свою очередь, узнают знакомые слова и могут догадаться, что имеется в виду в следующей последовательности символов, не являющейся Паскаль-программой:

 

PROGRAM CopyChar(INPUT, OUTPUT);

VAR

Ch; CHAR;

BEGIN

READ(Ch);

WRITELN(Ch)

END.

 

Паскаль-программа, с таким же именем, которая была рассмотрена на предыдущей лекции, выглядит так:

 

PROGRAM CopyChar(INPUT, OUTPUT);

VAR

Ch: CHAR;

BEGIN

READ(Ch);

WRITELN(Ch)

END.

 

Разница между этими строками символов в один-единственный символ не позволит компилятору языка Паскаль откомпилировать первый пример.

 

Из-за необходимости составления Паскаль-программ с точностью до символа, эта глава ознакомит вас со строгими правилами синтаксиса языка CF-Pascal. Конечно, эксперименты и примеры полезны во время изучения, но точные и лаконичные правила позволят вам уверенно проверять корректность программ. Изучения языков программирования только по примерам и использования компилятора для проверки синтаксиса приведет не только к ограниченному использованию ЯП, но также создаст неверное понимание о написания программ вообще.

Синтаксис 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 по одному символу за раз:

 

<идентификатор> По синтаксическому правилу
C С является <буквой> по правилу 4.3, и, следовательно, <идентификатором> по правилу 3.1
Co С является <буквой> как описано выше, o является <буквой> по правилу 4.41, поэтому Coявляется идентификатором по правилу 3.2
Cop Подобным образом, как в случае с Co, Copявляется идентификатором по правилам 4.42 и 3.2
 
CopyChar подобно CopyCha и правилам 1.44 и 3.2

 

Подобным образом последовательности символов Copy1, XxXxX, One4Two являются <идентификаторами>.

 

Поскольку пробелы встречаются в синтаксических правилах только для улучшения читаемости, они не могут встречаться внутри <идентификаторов>

 

Почему ниже перечисленные символьные строки не являются идентификаторами?

 

Последовательность символов Не является <идентификатором> потому что
2nd не начинается с буквы
C 75 содержит пробел
Ch1+Ch2 символ + не является ни буквой, ни цифрой

 

 

Синтаксические деревья

 

Правила синтаксиса языка CF-Pascal определяют пошаговое построение любой программы в виде последовательности символов. В случае, когда такое построение программы невозможно, символьная последовательность не может быть текстом Паскаль-программы. Построение программы может быть изображено в виде синтаксического дерева. На рисунке 1 частично построена <программа> CopyChar.





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


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 919 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Логика может привести Вас от пункта А к пункту Б, а воображение — куда угодно © Альберт Эйнштейн
==> читать все изречения...

2285 - | 2212 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.