字面值包括整数,浮点数,字符,布尔值,记号,字符串。这些字面值的语法均和 Java 中的字面值一致。 语法: Literal ::= [„-„] integerLiteral | [„-„] floatingPointLiteral | booleanLiteral | characterLiteral | stringLiteral | symbolLiteral | „null‟ 1.3.1. 整型字面值 语法: integerLiteral ::= (decimalNumeral | hexNumeral | octalNumeral)[„L‟|„l‟] decimalNumeral ::= „0‟ | nonZeroDigit {digit} hexNumeral ::= „0‟„x‟ hexDigit {hexDigit} octalNumeral digit nonZeroDigit octalDigit ::= „0‟ octalDigit {octalDigit} ::= „0‟ | nonZeroDigit ::= „1‟ | ... | „9‟ ::= „0‟ | ... | „7‟ 整型字面值通常表示Int型,或者后面加上L或l表示Long型。Int的值的范围是-231到 231-1 间的整数,包含边界值。Long 的值的范围是-263到263-1 间的整数,包含 边界值。整型字面值的值超出以上范围就会导致编译错误。 如果一个字面值在表达式中期望的类型pt(§6.1)是Byte, Short 或者 Char 中的 一个,并且整数的值符合该类型的值的范围,那么这个数值就会被转为 pt 类型,这个字 面值的类型也是pt。数值范围如下所示: Byte Short Char -27到27-1 -215到215-1 0 到216-1 示例1.3.1以下是一些整型字面值: 0 21 0xFFFFFFFF 0777L 1.3.2. 浮点型字面值 语法: floatingPointLiteral ::= digit { digit } „.‟ { digit } [ exponentPart ] [ floatType ] | „.‟ digit { digit } exponentPart [ floatType ] |digit{digit}exponentPart [ floatType] 5 字面值 | digit { digit } [ exponentPart ] floatType exponentPart floatType ::= („E‟ | „e‟)[„+‟ | „-‟]digit{digit} ::= „F‟ | „f‟ | „D‟ | „d‟ 如果浮点数字面值的后缀是 F 或者 f,那么这个字面值的类型是 Float,否则就是 Double。Float 类型包括所有 IEEE 754 32 位单精度二进制浮点数值,Double 类型 包括所有IEEE 754 64位双精度二进制浮点数值。 如果程序中浮点数字面值后面跟一个字母开头的符号,那么这两者之间应当至少有一 个空白字符。 示例1.3.2 以下是一些浮点型字面值: 0.0 1e30f 3.14159f 1.0e-100 .1 示例1.3.3短语„1.toString‟将被解析为三个符号:„1‟, „.‟和„toString‟。但是 如果在句点后插入一个空格,短语„1. toString‟就会被解析为一个浮点数„1.‟和一个 标识符„toString‟。 1.3.3. 布尔型字面值 语法: booleanLiteral ::= „true‟ | „false‟ 布尔型字面值true和false是Boolean类型的成员 1.3.4. 字符型字面值 语法: characterLiteral ::= „\‟‟ printableChar „\‟‟ | „\‟‟ charEscapeSeq „\‟‟ 字符型字面值就是单引号括起来的单个字符。字符可以是可打印 unicode 字符或者 由一个转义序列(§1.3.6)描述的unicode字符。 示例1.3.4 以下是一些字符型字面值: „a‟ „\u0041‟ „\n‟ „\t‟ 注意„\u000A‟不是一个合法的字符常数,因为在处理字面值前已经完成了 Unicode 转换,而 Unicode 字符\u000A(换行)不是一个可打印字符。可以使用转义序列„\n‟或 八进制转义„\12‟来表示一个换行字符(§1.3.6)。 1.3.5. 字符串字面值 语法: stringLiteral ::= „\"‟ {stringElement} „\"‟ stringElement ::= printableCharNoDoubleQuote | charEscapeSeq 6 词法 字符串字面值是由双引号括起来的字符序列。字符必须是可打印 unicode 字符或者 转义序列(§1.3.6)。如果一个字符串字面值包括双引号,那么这个双引号必须用转义字 符,比如:\"。字符串字面值的值是类String的一个实例。 示例1.3.5 以下是一些字符串字面值 "Hello,\nWorld!" "This string contains a \" character." 多行字符串字面值 语法: stringLiteral ::= „"""‟ multiLineChars ‟"""‟ multiLineChars ::= {[„"‟][„"‟] charNoDoubleQuote} 多行字符串字面值是由三个双引号括起来的字符序列"""..."""。字符序列是除了三 个双引号之外的任意字符序列。字符不一定必须是可打印的;换行或者其他控制字符也是 可以的。Unicode转义序列也可以,不过在(§1.3.6)中定义的转义序列不会被解析。 示例1.3.6 以下是一个多行字符串字面值: """the present string spans three lines.""" 以上语句会产生如下字符串: the present string spans three lines. Scala 库里包括一个工具方法 stripMargin,可以用来去掉多行字符串行首的空格。 表达式: """the present string spans three lines.""".stripMargin 的值为: the present string spans three lines. stripMargin 方法定义在类 scala.runtime.RichString。由于有预定义的从 String 到RichString的隐式转换,因此这个方法可以应用到所有的字符串。
相关推荐
大梦百万秋15 分钟前
Spring Boot 实战:构建一个完整的电商平台网络安全指导员19 分钟前
渗透利器-kali工具 (第五章-4) Metasploit漏洞利用模块一小泽呀x24 分钟前
springboot+javafx使用aop切面导致的fx:id不能被注入问题GOTXX31 分钟前
基于MATLAB的图像增强每天写点bug34 分钟前
【go每日一题】 channel实现mutex锁工业甲酰苯胺36 分钟前
Python随机抽取Excel数据并在处理后整合为一个文件customer0840 分钟前
【开源免费】基于SpringBoot+Vue.JS课程智能组卷系统(JAVA毕业设计)长潇若雪41 分钟前
《深入探究:C++ 在多方面对 C 语言实现的优化》全职计算机毕业设计1 小时前
青少年夏令营管理系统的设计与开发(社团)+开题报告(springboot+freemarker)air_7292 小时前
网络应用技术 实验八:防火墙实现访问控制(华为ensp)