JAVA BNF"如果" - 这是什么意思?

时间:2016-03-16 23:33:14

标签: java bnf

基本上是标题。 通过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>

它是什么&#34;没有短暂的&#34;意思?我看到&#34; NoShortIf&#34;在我的演讲幻灯片中弹出,没有解释它的含义。

2 个答案:

答案 0 :(得分:2)

“短if”是一个if语句,没有else。

在某些情况下,不允许使用“简短的假设”来消除歧义。

以下是有效的Java。没有“简短的假设”,也没有歧义。

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

以下也是有效的Java代码,但是如果没有“ short if”规则,那么else是否属于哪个是不确定的。

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;

也就是说,else属于内部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

答案 1 :(得分:1)

答案在上面@Andy Turner的评论中提供的链接中:

  

因此,语句在语法上分为两类:那些   可能以没有else子句的if语句结束(&#34;短if)   声明&#34;)和那些绝对没有的声明。

     

只有明确不以short if语句结尾的语句才可以   在if中的关键字else之前显示为直接子语句   有一个else子句的语句。

     

这个简单的规则可以防止&#34;悬空其他&#34;问题。执行   &#34;没有短的语句的行为&#34;限制是   与同类语句的执行行为相同   没有&#34;没有短暂的&#34;限制;纯粹是区分   解决句法难度。