9.3.4 simpleNameCS
该产生式规则代表了一个简单名称。没有可应用的特殊规则。simpleNameCS字符串的抽象语法在UML中是未定义的,因此在OCL中也是未定义的,原因在于国际化。
simpleNameCS字符串的具体语法支持以Unicode字母为前缀的标识符(格式[A])。保留字和涉及类似标点符号等的名称可以通过字符串字面量加'_'前缀的方式(格式[B]和[C])。
[A] simpleNameCS ::= NameStartChar NameChar*
[B] simpleNameCS ::= '_' #x27 StringChar* #x27
[C] simpleNameCS[1] ::= simpleNameCS[2] WhiteSpaceChar* #x27 StringChar* #x27
以Unicode字母开头的标识符:
NameStartChar ::= [A-Z] | "_" | "$" | [a-z]
| [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF]
| [#x370-#x37D] | [#x37F-#x1FFF]
| [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF]
| [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD]
| [#x10000-#xEFFFF]
并且可以继续与一个Unicode字母或数字进行组合。
NameChar ::= NameStartChar | [0-9]
StringChar格式在StringLiteralExpCS下定义。
simpleNameCS的实例:
String i3 αρετη MAX_VALUE isLetterOrDigit _'true' _'>=' _'\''
抽象语法映射
simpleNameCS.ast : String
合成的属性
[A] simpleNameCS.ast = <CodePoints of NameStartChar NameChar*>
[B] simpleNameCS.ast = <CodePoints of StringChar*>
[C] simpleNameCS[1].ast = simpleNameCS[2] + <CodePoints of StringChar*>
继承的属性
--没有
歧义消除规则
[1] [A] the character, if any, following the last NameChar is not a NameChar.
[2] [A] simpleNameCS.ast不是一个保留字。
[3] [B] '_'和第一个NameChar之间不能有空格。
[4] [C] simpleNameCS[2]是一个simpleNameCS [B] 或 [C].