JAVA BNF“没有捷径,如果” - 这是什么意思?

问题描述 投票:0回答:2

基本上称号。通过Java BNF看,我看到“没有捷径,如果”如:

<statement no short if> ::= <statement without trailing substatement> | <labeled statement no short if> | <if then else statement no short if> | <while statement no short if> | <for statement no short if>

这是什么“没有捷径,如果”是什么意思?我看“NoShortIf”弹出我的演讲稿,没有什么意思的解释。

java bnf
2个回答
1
投票

答案是在由@Andy特纳注释上面提供的链接:

声明因此语法分为两类:一类是那些可能在没有其他条款(“短if语句”)if语句结束,那些绝对没有。

只有绝对不会在短时间内结束,如果语句可能出现在确实有else子句的if语句其他关键字之前,立即子语句的语句。

这个简单的规则阻止了“晃来晃去别人”的问题。声明与“无短,如果”限购是相同的同类语句的执行行为的执行行为没有“不短,如果”限购;区别纯粹是拉来解决语法难度。


2
投票

“短,如果”是没有其他的if语句。

“短IFS”不是在某些情况下允许消除歧义。

以下是有效的Java。有没有“短IFS”,没有歧义。

boolean flag = false;
if (x > 0) 
    if (x > 10)
        flag = true;
    else
        flag = false;
else 
    flag = true;

以下也是有效的Java代码,但没有“短,如果”规则存在模糊性,如果其他所属。

if (x > 0)  if (x < 10) flag = true; else  flag = false;

下面的Java语言规则

IfThenStatement:
   if ( Expression ) Statement
IfThenElseStatement:
   if ( Expression ) StatementNoShortIf else Statement

意味着,上面的代码的含义是

if (x > 0)  
    if (x < 10) 
       flag = true; 
    else  
       flag = false;

也就是说,其他人属于内部的if语句。

让我们在Java测试,以确保

static Boolean shorty (int x) {
    Boolean flag = null;
    if (x > 0)  if (x < 10) flag = true; else  flag = false;
    return flag;
}


public static void main(String[] args) {
    System.out.println(shorty(-1));
    System.out.println(shorty(5));
    System.out.println(shorty(20));
}

输出是

null
true
false
© www.soinside.com 2019 - 2024. All rights reserved.