отчетность подготовлена таким образом, грамматически разделены на две категории: те, которые могли бы закончиться, если заявление, которое не имеет пункт еще («короткий, если заявление») и те, которые, безусловно, не так.
Это означает заявления разделены на StatementNoShortIf и Заявление. Какой Заявление может появиться в «короткой инструкции if» и StatementNoShortIf не может.
Короткий оператор if является оператором if без предложения else.
IfThenStatement: // short if statement
if (Expression) Statement
IfThenElseStatement: // not short if statement
if (Expression) StatementNoShortIf else Statement
IfThenElseStatementNoShortIf: // not short if statement
if (Expression) StatementNoShortIf else StatementNoShortIf
только заявления, которые определенно не заканчиваются на короткий, если оператор может появиться в качестве непосредственного подоператора перед ключевым словом еще в, если утверждение, что действительно есть пункт еще.
Только StatementNoShortIf может появиться между if
и else
в не краткосрочным, если заявление.
И такой StatementNoShortIf должен быть немедленным подоператором этого if else
заявления.
Это простое правило предотвращает проблему «болтаться еще». Исполнение инструкции с ограничением «не короткое, если» идентично поведению выполнения одного и того же вида без ограничения «не короткое, если»; различие делается исключительно для разрешения синтаксической трудности.
Поэтому рассмотрим висящий еще пример проблемы, как это:
if (door.isOpen())
if (resident.isVisible())
resident.greet("Hello!");
else door.bell.ring(); // A "dangling else"
else
не может быть частью первой if
.
Если да, то в соответствии с немедленным подоператором правила , линия 2-3 должна быть StatementNoShortIf заявления, но это на самом деле IfThenStatemtn (коротким, если заявление), потому что StatementNoShortIf всегда нуждается в else
, Следовательно, else должен быть частью второго, если, таким образом, проблема с болтающимися остатками решена.
вы действительно должны добавить предыдущую строку: «Язык программирования Java, такой как C и C++, и многие языки программирования перед ними, произвольно декретирует, что предложение else принадлежит самому внутреннему, если оно может принадлежать. по следующей грамматике: « –
@NathanHughes Да, вопрос читается немного странно без контекста. Спасибо, что предоставили его. –