规范

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

step9 语法规范

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


program : function* function : type Identifier '(' parameter_list ')' (compound_statement | ';')
type : 'int'
parameter_list : (type Identifier (',' type Identifier)*)?
compound_statement : '{' block_item* '}' block_item : statement | declaration statement : 'return' expression ';' | expression? ';' | 'if' '(' expression ')' statement ('else' statement)? | compound_statement | 'for' '(' expression? ';' expression? ';' expression? ')' statement | 'for' '(' declaration expression? ';' expression? ')' statement | 'while' '(' expression ')' statement | 'do' statement 'while' '(' expression ')' ';' | 'break' ';' | 'continue' ';' declaration : type Identifier ('=' expression)? ';'
expression_list : (expression (',' expression)*)?
expression : assignment assignment : conditional | Identifier '=' expression conditional : logical_or | logical_or '?' expression ':' conditional 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 : postfix | ('-'|'~'|'!') unary postfix : primary | Identifier '(' expression_list ')'
primary : Integer | '(' expression ')' | Identifier

step9 语义规范

9.1. main 默认返回 0,但如果其他函数也没有 return,则它们的返回值未定义。 如果程序尝试使用这个未定义的返回值,那么产生一个未定义行为。 当然,如果程序忽略它,那是合法的。

我们没有支持 void 返回值,但可以忽略返回值达到类似的效果。

9.2. 每个函数只能被定义一次,在定义之前可能有一次前置声明。 多次声明一个函数、以及定义后再声明,均是未定义行为。 多次定义一个函数是错误。

9.3. 函数声明和定义的参数个数、同一位置的参数类型、以及返回值类型必须相同。

现在只有 int 类型,不过以后会有更多类型。

9.4. 调用某函数时,实参和形参的参数个数必须相同,同一位置的参数类型也必须相同。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""