※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

3. 字句構造

3.1. Unicode

3.2. 字句変換

3.3. Unicodeエスケープ

3.4. 行終端子

3.5. 入力要素とトークン

3.6. 空白

3.7. コメント

3.8. 識別子

3.9. キーワード

3.10. リテラル

3.10.1. 整数リテラル

3.10.2. 浮動小数点リテラル

3.10.3. ブールリテラル

3.10.4. 文字リテラル

文字リテラル(character literal)はASCII一重引用符(シングルクォートまたはアポストロフィ、文字コードは\u0027)で括られた1文字か1つのエスケープシーケンスです。

CharacterLiteral:
  ' SingleCharacter '
  ' EscapeSequence '

SingleCharacter:
  InputCharacter but not ' or \

エスケープシーケンスの定義は3.10.6.を参照してください。

文字リテラルはUTF-16コード単位のみを表します。つまり、その値は\u0000から\uffffの間の値に限られます。補助文字はchar列のサロゲートペアか取扱い可能なAPIで使える整数値で表す必要があります。

文字リテラルは常にchar型です。

SingleCharacterEscapeSequenceの後に続く文字が'でなければコンパイルエラーとなります。

始まりの'の後、終わりの'の前に行終端子が入るとコンパイルエラーとなります。

3.4.で明記した通り、文字CRとLFは決してInputCharacterとはなりません。それらはLineTerminatorを構成するものとして認識されます。

以下は文字リテラルの例です。:
  • 'a'
  • '%'
  • '\t'
  • '\\'
  • '\''
  • '\u03a9'
  • '\uFFFF'
  • '\177'
  • 'Ω'
  • '⊗'

Unicodeエスケープはごく初期に処理されるため、ラインフィード(LF)の値をとる文字リテラルとしての'\u000a'という書き方は正しくありません。Unicodeエスケープ'\u000a'変換ステップ1において実際のラインフィードに変換され、ステップ2においてラインフィードはLineTerminatorとなるため、ステップ3においてその文字リテラルは有効ではりません。代わりに、エスケープシーケンス'\n'を使用します。同様にキャリッジリターン(CR)の値をとる文字リテラルとしての'\u000d'という書き方は正しくありません。代わりに'\r'を使用してください。

CやC++では、文字リテラルは1つ以上の文字を含む表現でもよいのですが、そのような文字リテラルの値は実装依存となります。Javaプログラミング言語では、文字リテラルは常にただ1つの文字を表します。

3.10.5. 文字列リテラル

3.10.6. 文字・文字列リテラル用のエスケープシーケンス

3.10.7. ヌルリテラル

3.11. 分離子

3.12. 演算子