er IDparams compound-stmt7.params → param-list void8.param-list → param-list param param9.param → type-specifier ID type-specifier ID函数声明由返回类型指示符、标识符以及在圆括号内的用逗号分开的参数列表组成,后面跟着一个复合语句,是函数的代码。
如果函数的返回类型是void,那么函数不返回任何值即是一个过程。
函数的参数可以是void即没有参数,或者一列描述函数的参数。
参数后面跟着方括号是数组参数,其大小是可变的。
简单的整型参数由值传递。
数组参数由引用来传递也就是指针,在调用时必须通过数组变量来匹配。
注意,类型“函数”没有参数。
一个函数参数的作用域等于函数声明的复合语句,函数的每次请求都有一个独立的参数集。
函数可以是递归的对于使用声明允许的范围。
10.compound-stmt → local-declarations statement-list 复合语句由用花括号围起来的一组声明和语句组成。
复合语句通过用给定的顺序执行语句序列来执行。
局部声明的作用域等于复合语句的语句
列表,并代替任何全局声明。
11.local-declarations → local-declarations var-declaration empty12.statement-list → statement-list statement empty注意声明和语句列表都可以是空的非终结符empty表示空字符串,有时写作ε。
13.statement → expression-stmt compound-stmt selection-stmt iteration-stmt return-stmt14.expression-stmt → expression 表达式语句有一个可选的且后面跟着分号的表达式。
这样的表达式通常求出它们一方的结果。
因此,这个语句用于赋值和函数调用。
15.selection-stmt → if expression statement if expression statement else statementif语句有通常的语义:表达式进行计算;非0值引起第一条语句的执行;0值引起第二条语句的执行,如果它存在的话。
这个规则导致了典型的悬挂else二义性,可以用一种标准的方法解决:else部分通常作为当前if的一个子结构立即分析“最近嵌套”非二义性规则。
16.iteration-stmt → while expression statementwhile语句是C-中唯一的重复语句。
它重复执行表达式,并且如果表达式的求值为非0,则执行语句,当表达式的值为0时结束。
17.return-stmt → return return expression 返回语句可以返回一个值也可无值返回。
函数没有说明为void就必须返回一个值。
函数声明为void就没有返回值。
return引起控制返回调用者如果它在main中,则程序结束。
18.expression → varexpression simple-expression19.var→ ID IDexpression表达式是一个变量引用,后面跟着赋值符号等号和一个表达式,或者就是一个简单的表达式。
赋值有通常的存储语义:找到由var表示的变量的地址,然后由赋值符右边的子表达式进行求值,子表达式的值存储到给定的地址。
这个值也作为整个表达式的值返回。
var是简单的整型变量或下标数组变量。
负的下标将引起程序停止与C不同。
然而,不进行下标越界检查。
var表示C1比C的进一步限制。
在C中赋值的目标必须是左值l-value,左值是可以由许多操作获得的地址。
在C1中唯一的左值是由var语法给定的,因此这个种类按照句法进行检查,代替像C中那样的类型检查。
故在C1中指针运算是禁止的。
20.simple-expression → additive-expression relop additive-expression additive-expression21.relop → lt lt gt gt ampamp 简单表达式由无结合的关系操作符组成即无括号的表达式仅有一个关系操作符。
简单表达式在它不包含关系操作符时,其值是加法表达式的值,或者如果关系算式求值为ture,其值为1,求值为false时值为0。
22.additive-expression → additive-expression addop term term23.addop → -24.term → term mulop factor factor25.mulop → /加法表达式和项表示了算术操作符的结合性和优先级。
/符号表示整数除;即任何余数都被截去。
26.factor → expression var call NUM因子是围在括号内的表达式;或一个变量,求出其变量的值;或者一个函数调用,求出函数的返回值;或者一个NUM,其值由扫描器计算。
数组变量必须是下标变量,除非表达式由单个ID组成,