リテラル

リテラルは、プログラム中で参照することのできる自己定義定数です。リテラルは、RPG IV データ・タイプのいずれかに含めることができます。

文字リテラル

文字リテラルを指定する場合の規則は次のとおりです。
  • 文字リテラルでは、任意の文字の組み合わせを使用することができます。 これには DBCS 文字が含まれます。 DBCS 文字は、シフトアウトおよびシフトイン文字で囲み、偶数のバイト数に なっていなければなりません。 ブランクの挿入も有効です。
  • アポストロフィの間に文字がない文字リテラルも使用 することができます。例については、図 1 を参照してください。
  • 文字リテラルはアポストロフィ (’) で囲む必要があります。
  • リテラルの一部として必要なアポストロフィは、2 重のアポストロフィで表 されます。 例えば、リテラル O’CLOCK は‘O’’CLOCK’とコーディングされます。
  • 文字リテラルは文字データとだけ互換性があります。
  • 標識リテラルは、'1' (オン) または '0' (オフ) の いずれかが入れられる、1 バイトの文字リテラルです。

16 進数リテラル

16 進数リテラルを指定する場合の規則は次のとおりです。
  • 16 進数リテラルは、次の形式をとります。
    X'x1x2...xn'
    ここで、X'x1x2...xn' には、 文字 A から F、a から f、および 0 から 9 しか含めることができません。
  • アポストロフィで囲んでコーディングされたリテラルの長さは偶数でなけれ ばなりません。
  • 文字の対はそれぞれ 1 バイトを定義します。
  • 16 進数リテラルは、ENDSR の演算項目 2 および編集語として以外は、文字リテ ラルがサポートされているところであればどこでも指定できます。
  • ビット命令 BITON、BITOFF、TESTB で使用される場合を除き、16 進数リテラル の意味は対応する文字リテラルと同じです。 ビット命令の場合は、演算項目 2 には 1 バイトを表す 16 進数リテラルが含まれ ることがあります。 16 進数リテラルの規則と意味は、文字リテラルの場合と同じです。
  • 16 進数リテラルに単一引用符の 16 進数値が含まれている場合には、文字リテ ラルと異なり、2 度指定する必要はありません。例えば、リテラル A'B'A''B' と指定されますが、16 進の場合は X'C17DC2' であり、X'C17D7DC2' ではありません。
  • 通常、16 進数リテラルは文字データとだけ互換性が あります。ただし、16 桁以下の 16 進数字を含む 16 進数リテラルは、数値式の 中で使用されるときや、数値変数が INZ キーワードを使用して初期化される ときは、符号なし数値として扱うことができます。

数字リテラル

数値リテラルを指定する場合の規則は次のとおりです。
  • 数値リテラルは、数字 0 から 9 の任意の組み合わせによって構成されます。 小数点または符号を含めることができます。
  • 符号 (+ または -) がある場合には、左端の文字としなければなりません。 符号なしリテラルは、正数として取り扱われます。
  • 数値リテラルにブランクを表すことはできません。
  • 数値リテラルはアポストロフィ (’) で囲まれません。
  • 数値リテラルは数値フィールドと同様に使用されます。ただし、その値を数 値リテラルに割り当ていることはできません。
  • 10 進数区切り記号はコンマまたはピリオドのいずれかにすることができます。
浮動形式の数値リテラルは、異なった方法で指定されます。 浮動リテラルの形式は次のとおりです。
     <mantissa>E<exponent>

ここで、

     <mantissa> is a literal as described above with 1 to 16 digits
     <exponent> is a literal with no decimal places, with a value
                between -308 and +308
  • 浮動リテラルは正規化する必要がありません。 つまり、 小数部を書く場合に、小数点の左側に必ず 1 桁設ける必要がないということ です。(さらに、小数点を指定する必要もありません。)
  • 小文字の eE の代わりに使用する ことができます。
  • ピリオド (「.」) またはコンマ (「,」) のいずれかを小数点として使用できます。
  • 浮動リテラルは、浮動データ・タイプを認めない命令の 中以外なら、数値定数が使用できる場所ならどこでも使用する ことができます。 たとえば、浮動リテラルは、配列指標などの、小数点以下の桁数がゼロである 数値リテラルが予想されている場所では使用できません。
  • 浮動リテラルは、正規の数値リテラルと同じ連結規則に従います。 このリテラルは、その中のどこで分割してもかまいません。
次のリストは、有効な浮動リテラルをいくつか例証したものです。
    1E1                = 10
    1.2e-1             = .12
    -1234.9E0          = -1234.9
    12e12              = 12000000000000
    +67,89E+0003       = 67890  (コンマは小数点です)
次のリストは、無効な浮動リテラルをいくつか例証したものです。
    1.234E                          <--- 指数がありません
    1.2e-                           <--- 指数がありません
    -1234.9E+309                    <--- 指数が大きすぎます
    12E-2345                        <--- 指数が小さすぎます
    1.797693134862316e308           <--- 値が大きすぎます
    179.7693134862316E306           <--- 値が大きすぎます
    0.0000000001E-308               <--- 値が小さすぎます

日付リテラル

日付リテラルは形式 D'xx-xx-xx' をとります。ここで、
  • D は、リテラルが日付タイプであることを指示します。
  • xx-xx-xx は、制御仕様書で指定された形式の有効な時刻です (区切り記号 を含む)。
  • xx-xx-xx はアポストロフィで囲まれます。

時刻リテラル

時刻リテラルは形式 T'xx:xx:xx' をとります。ここで、
  • T は、リテラルが時刻タイプであることを指示します。
  • xx:xx:xx は制御仕様書で指定された形式の有効な時刻 です (区切り記号を含む)。
  • xx:xx:xx はアポストロフィで囲まれます。

タイム・スタンプ・リテラル

変更の始まりタイム・スタンプ・リテラルの形式は Z'yyyy-mm-dd-hh.mm.ss' であり、 オプションで、その後に 1 個のピリオドとゼロ桁から 12 桁の 秒の小数部を続けることができます (Z'yyyy-mm-dd-hh.mm.ss.frac')。 各部の意味は次のとおりです。
  • Z は、リテラルがタイム・スタンプ・タイプであることを指示します。
  • yyyy-mm-dd は、有効な日付 (年-月-日) です。
  • hh.mm.ss は、有効な時刻 (時.分.秒) です。
  • 変更の始まりfrac は、ゼロ桁から 12 桁で、秒の小数部を表します。変更の終わり
  • 変更の始まり秒の小数部はオプションであり、6 桁より少ない桁の小数部が指定された場合、 タイム・スタンプ・リテラルは秒の小数部が 6 桁になるようにゼロを追加して埋められます。変更の終わり
変更の終わり

変更の始まり例えば、Z'2014-12-03-11.41.52' には秒の小数部が 6 桁あり、Z'2014-12-03-11.41.52.000000' と等価です。 Z'2014-12-03-11.41.52.123' には秒の小数部が 3 桁あり、Z'2014-12-03-11.41.52.123000' と等価です。 Z'2014-12-03-11.41.52.1234567' には秒の小数部が 7 桁あり、 Z'2014-12-03-11.41.52.123456789012' には秒の小数部が 12 桁あります。変更の終わり

図形リテラル

図形リテラルは形式 G'oK1K2i' をとります。ここで、
  • G は、リテラルが図形タイプであることを指示します。
  • o はシフトアウト文字です。
  • K1K2 は偶数バイト (ゼロの場合もある) で、シフトアウトまたは シフトイン文字を含みません。
  • i はシフトイン文字です。
  • oK1K2i はアポストロフィで囲まれます。

UCS-2 リテラル

UCS-2 リテラルは、形式 U'Xxxx...Yyyy' をとります。ここで、
  • U は、リテラルがタイプ UCS-2 であることを指示します。
  • 各 UCS-2 リテラルは、そのリテラル内の UCS-2 文字ごとに 4 バイトずつ必要と します。そのリテラルの各 4 バイトは、それぞれ 1 個の 2 バイト UCS-2 文字を 表します。
  • UCS-2 リテラルは UCS-2 データとだけ互換性があります。

UCS-2 リテラルは、モジュールのデフォルトの UCS-2 CCSID 内にあると想定されます。