ada*_*LSE 10 ada abstract-syntax-tree short-circuiting
是什么意思
x AND THEN y AND z
Run Code Online (Sandbox Code Playgroud)
是吗
x AND THEN (y AND z)
Run Code Online (Sandbox Code Playgroud)
(如果x为FALSE,则y,z永远不会被评估)或
(x AND THEN y) AND z
Run Code Online (Sandbox Code Playgroud)
(如果x为FALSE,y被跳过,但可能是z被评估)在ada中?
@oenone的评论提到GNAT拒绝了x AND THEN y AND z,但没有解释原因。从某种意义上说,这是真的,and并且and then具有相同的优先级,但这不是全部。
表达式的语法为:
expression ::=
relation {and relation} | relation {and then relation}
| relation {or relation} | relation {or else relation}
| relation {xor relation}
Run Code Online (Sandbox Code Playgroud)
其中{ FOO }表示的零个或多个出现FOO。
该语法经过专门设计,允许将这些运算符或控制形式中的任何一个链接在单个表达式(X and Y and Z,A and then B and then C)中,但禁止将它们混合使用。因此,问题中的表达式x AND THEN y AND z是非法的,甚至没有出现其含义的问题。该规则的目的恰恰是避免在这种情况下造成混淆。
您只需要编写(X and then Y) and Z或X and then (Y and Z),就可以匹配您想要的内容。
混合and和or:
X and Y and Z -- legal
X and Y or Z -- ILLEGAL
(X and Y) or Z -- legal
X and (Y or Z) -- legal
Run Code Online (Sandbox Code Playgroud)