Здравствуйте, Сергей Губанов, Вы писали:
P>>P>>
P>>WHILE a DO x; y; z END
P>>
P>>То есть здесь z и END — одна инструкция?
СГ>1) Можно ответить: Да! Семантика этой инструкции: "Выполнить z и перейти к началу цикла WHILE".
СГ>2) Можно ответить: END — это не инструкция, а часть составной инструкции WHILE DO END, ведь инструкции бывают как простыми так и составными.
x тоже часть составной инструкции, однако ";" после нее стоит.
СГ>Выбирайте что Вам больше нравится.
Мне нравится, когда ";" является частью инструкции, а не разделителем между ними.
СГ>Это очень просто. При условии не наделять каким-либо дополнительным смыслом символы пробела, табуляции и новой строки кроме смысла и так натурально им присущим, все представленные в том сообщении отдельные инструкции являются минимально возможными.
СГ>Вот смотрите, заменим все служебные слова на символ "*"
СГ>СГ>REPEAT x UNTIL b = * x * b
СГ>WHILE a DO x END = * a * x *
СГ>IF a THEN x END = * a * x *
СГ>IF a THEN x ELSE y END = * a * x * y *
СГ>IF a THEN x ELSIF b THEN y ELSE z END = * a * x * b * y * z *
СГ>CASE n OF a: x | b: y ELSE z END = * n * a * x * b * y * z *
СГ>
СГ>между каждой "пользовательской" лексемой стоит не более одной звездочки. Меньше одной звездочки поставить нельзя — мы договорились пробельные символы не перегружать. Значит минимум достигнут. А то что этого достаточно, следует из смысла рассматриваемых инструкций.
Вместо REPEAT можно использовать WHILE, а вместо CASE — IF / ELSEIF / ELSE /END. Потому их можно выбросить => необходимость не доказана. О достаточности я пока молчу.