9.3.41 LetExpCS
该产生式规则代表了一个let表达式。LetExpSubCS非终结符的目的是允许使用简化语法进行直接的let表达式内嵌,即用‘in’关键字。
LetExpCS ::= ‘let’ VariableDeclarationCS LetExpSubCS
抽象语法映射
LetExpCS.ast : LetExp
合成的属性
LetExpCS.ast.variable = VariableDeclarationCS.ast
LetExpCS.ast.in = LetExpSubCS.ast
继承的属性
LetExpSubCS.env = LetExpCS.env.nestedEnvironment().addElement(
VariableDeclarationCS.ast.varName,
VariableDeclarationCS.ast,
false)
歧义消除规则
[1] 变量名在当前范围内必须是唯一的。
LetExpCS.env.lookup (VariableDeclarationCS.ast.varName).oclIsUndefined()
[2] let中的变量声明必须有一个类型和初始值。
not VariableDeclarationCS.ast.type.oclIsUndefined() and
VariableDeclarationCS.ast.initExpression->notEmpty()