Точка с запятой языка VDM++

Я читаю руководство по языку VDM++. Мой вопрос в том, что в некоторых случаях он использует ";" в конце утверждения и где-то в том же утверждении он не использует «;».

Ниже приведен пример

public Top : () ==> Elem
Top() ==
return (hd stack);


if test
then OpCall()
else return FunCall()

person Omer Obaid    schedule 22.03.2013    source источник


Ответы (1)


Точки с запятой являются разделителями в VDM, а не терминаторами, как в Java и C. Таким образом, вам нужна точка с запятой, когда две вещи идут последовательно, например, два определения или два утверждения. Но вам не нужен разделитель, если в «блоке» есть только одна вещь.

Таким образом, вашему первому примеру может понадобиться точка с запятой в конце, если следует другое определение, но не в том случае, если "Top" является последним определением в классе/модуле.

В вашем втором примере точка с запятой после OpCall() не нужна, потому что это один оператор в предложении «тогда». Вам может понадобиться точка с запятой после FunCall(), если за этим if/then/else следует другой оператор, но не иначе.

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

person Nick Battle    schedule 23.03.2013
comment
тогда откуда мы знаем, что где утверждение заканчивается? на самом деле я пытаюсь преобразовать код vdm+ в язык С++. Спасибо. - person Omer Obaid; 24.03.2013
comment
Если вы делаете перевод VDM++/C++, вы должны разобрать VDM++, как я полагаю, вы и делаете. Таким образом, оператор представляет собой либо один оператор (без точки с запятой), либо блок (с точкой с запятой между операторами и без точки с запятой после блока). То же самое с определениями на внешнем уровне, за исключением того, что каждая последовательность определений находится между ключевыми словами, такими как типы, значения, операции и т. д. Если в последовательности их больше одного, вам нужны точки с запятой; и вам не нужен один после последнего в последовательности. - person Nick Battle; 25.03.2013
comment
Вы также можете столкнуться с различными проблемами, связанными с плохо определенной семантикой VDM++ по сравнению с C++. См. первый документ здесь - person Nick Battle; 25.03.2013