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