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 требует данных больше, чем имеется, она может решить задачу ошибочно. Эти проблемы лежат вне синтаксиса, в области, называемой семантикой.