规范

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

step2 语法规范

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


program
    : function

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

type
    : 'int'

statement
    : 'return' expression ';'

expression : unary unary : Integer | ('-'|'!'|'~') unary

step2 语义规范

2.1 运算符 - 的结果是其操作数的相反数。

2.2 运算符 ~ 的结果是其操作数的二进制反码(也就是说,结果中的每一个二进制位是 1 当且仅当其对应的二进制位是 0)。

2.3 当操作数不等于 0 时,逻辑非运算符 ! 的结果为 0;当操作数等于 0 时,其结果为 1。

2.4 MiniDecaf 中,负数字面量不被整体作为一个 token。它被看成是一个取负符号、后面是它的绝对值。 所以我们无法用字面量表示 -2147483648,但可以写成 -2147483647-1(待我们加上四则运算后)。

2.5 整数运算越界是未定义行为(undefined behavior),即对程序的行为无任何限制。

例如 -(-2147483647-1) 是未定义行为。这一条规则对于后续 step 引入的运算符也都适用。

对于含有未定义行为的 C/C++ 程序,在启用优化选项编译时,编译器可能产生意料之外的结果。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""