规范

每个步骤结尾的 规范 一节都会对这个步骤中的新特性给出规范,方便大家查阅。

step4 语法规范

灰色部分表示相对上一节的修改。


program
    : function

function
    : type Identifier '(' ')' '{' statement '}'

type
    : 'int'

statement
    : 'return' expression ';'

expression : logical_or logical_or : logical_and | logical_or '||' logical_and logical_and : equality | logical_and '&&' equality equality : relational | equality ('=='|'!=') relational relational : additive | relational ('<'|'>'|'<='|'>=') additive
additive : multiplicative | additive ('+'|'-') multiplicative multiplicative : unary | multiplicative ('*'|'/'|'%') unary unary : primary | ('-'|'~'|'!') unary primary : Integer | '(' expression ')'

step4 语义规范

4.1 关系操作符 <(小于)、>(大于)、<=(小于等于)和>=(大于等于)的结果取决于两个操作数是否满足它们所指定的关系,当满足时结果为 1,当不满足时结果为 0。

关系操作符可能导致表达式的含义与数学文献中常见的含义不同,例如 0<1<2 的含义与 (0<1)<2 相同,即“如果 0 小于 1,那么判断是否有 1 小于 2,否则判断是否有 0 小于 2”。

4.2 判等操作符 ==(等于)和 !=(不等于)类似于关系操作符,结果取决于两个操作数是否满足它们所指定的关系,当满足时结果为 1,当不满足时结果为 0。但判等操作符的优先级比关系操作符更低。对于任意一对操作数,这两个操作符中有且仅有一个结果为 1。

其优先级的设定会导致其含义在某些时候可能会反直观,例如,0 < 1 == 2 < 3 的运算结果为 1。

4.3 当操作数都非 0 时,逻辑与操作符 && 的结果为 1;否则其结果为 0。

4.4 当操作数有一个非 0 时,逻辑或操作符 || 的结果为 1;否则其结果为 0。

4.5 逻辑操作符 ||&& 依然遵循语义规范 3.5,即其操作数的求值顺序是未指定行为。 换言之,我们不对逻辑表达式的短路求值做要求,可以将操作数两个以任意顺序计算出,再计算逻辑操作的结果。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""