CR1. Все идентификаторы в разделе объявлений должны быть уникальными.

CR2. Ни одно из зарезервированных слов, например IF, WHILE, и т.д. не могут быть использованы в качестве идентификаторов. (Список зарезервированных слов будет дан позднее)

Рисунок 5 показывает, что VAR Ch : CHAR является <разделом объявлений>

 

Рис. 5. Синтаксическое дерево для <раздела объявлений>

Синтаксис оператора BEGIN задается синтаксическими правилами 9, 10 и контекстным правилом 3

SR9. <оператор BEGIN> ::= BEGIN <список операторов> END

SR10. <список операторов> ::= <оператор>

| <список операторов> ; <оператор>

CR3. Любой идентификатор в операторе, отличный от стандартных идентификаторов вроде READ, WRITE и т.д. должен присутствовать в <списке идентификаторов> <раздела объявлений>.

Синтаксис операторов языка CF-Pascal

В данном разделе дается описание синтаксиса операторов языка Pascal.

SR11. <оператор> ::= <оператор READ>

| <оператор WRITE>

| <оператор присвоения>

| <пустой оператор>

| <оператор BEGIN>

| <оператор IF>

| <оператор WHILE>

SR12. <оператор READ> ::= READ (<список идентификаторов>)

SR13. <оператор WRITE> ::= WRITE(<список write>)

| WRITELN (<список write>)

| WRITELN

SR14. <список write> ::= <элемент write>

| <список write> , <элемент write>

SR15. <элемент write> ::= <идентификатор>

| '<строка символов>'

SR16. <строка символов> ::= <символ>
| <строка символов> <символ>

SR17. <символ> ::= <буква>, <цифра>, <особый символ>

SR18 <особый символ> ::= ( | ) | = | { | } |: |; | ’’ | < | > | , | . | #

Некоторые Паскаль-машины имеют больший набор специальных символов, но вышеупомянутых символов нам будет достаточно для CF-Pascal.

 

SR19. <оператор присвоения> ::= <идентификатор> := <выражение>

SR20. <выражение> ::= <идентификатор>

| '<символ>'

SR21. <пустой оператор> ::=

SR22. <оператор IF> ::= IF <условие> THEN <оператор>

| IF <условие> THEN <оператор> ELSE <оператор>

SR23. <условие> ::= <выражение> <сравнение > <выражение>

SR24. <сравнение> ::= < | = | > | <= | <> | >=

SR25. <оператор WHILE> ::= WHILE <условие> DO <оператор>

Комментариив Паскаль-программах не упоминаются в синтаксических правилах BNF, поскольку они имеют особое правило:

Комментарий начинается со специального символа { и заканчивается }; между этими маркерами может встречаться любой символ. Комментарий может располагаться в любом месте синтаксически корректной программы, где может располагаться пробел, за исключением <строки символов> <элемента write>.

 

Паскаль-машина будет пытаться выполнить любую последовательность символов, соответствующую синтаксическим и контекстным правилам, считая ее Паскаль-программой. Однако синтаксически корректная программа может попасть в бесконечный цикл. Она может прерваться из-за того, что оператор READ требует данных больше, чем имеется, она может решить задачу ошибочно. Эти проблемы лежат вне синтаксиса, в области, называемой семантикой.