OSDN Git Service

翻訳ミスを修正
[omake-japanese/omake_trans.git] / omake-grammar.rst
1 .. B. OMake grammar
2
3 .. _labelB:
4
5 B. OMake言語の文法
6 ======================================
7
8 .. _labelB.1:
9
10 B.1 OMakeの語彙規則
11 ---------------------------------------
12 OMake言語は、2,3個の語彙規則からなるGNU/BSDのmake言語を元にしています。厳密にいうと、この言語にキーワードは存在しません。また、少数の特殊文字から成り立っています。
13
14 .. _labelB.1.1:
15
16 B.1.1 コメント
17 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
18 コメントは ``#`` 文字から始まり、行末まで続きます。また、コメントの中にある文字列の制限はありません。
19
20 例::
21
22    # This is a comment
23    # This $comment contains a quote " character
24
25 .. _labelB.1.2:
26
27 B.1.2 特殊文字
28 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
29 以下の文字は、特定の文中で特殊文字となります。::
30
31    $    (    )    ,    .   =    :    "    '    `    \    #
32
33 * ``$`` は変数の参照、あるいは関数を適用する際に用いられます。
34 * 括弧 ``)``, ``(`` は引数のデリミタに用いられます。
35 * コマンド ``,`` は引数のセパレータです。
36 * ピリオドシンボル ``.`` は名前のセパレータです。
37 * 等価シンボル ``=`` は定義(definition)を意味します。
38 * コロンシンボル ``:`` はルール付けと、『この式はインデント先の内容に従っている』ことを示すために用いられます???ただし、後者はオプションです。
39 * クオーテーションシンボル ``"`` と ``'`` は文字列の範囲を定めるために用いられます。
40 * シンボル ``#`` は定数の初期文字です。
41 * エスケープシンボル ``\`` は別の特殊文字を修飾するため *のみ* に用いられます。この場合、二番目の文字の特殊効果はすべて取り除かれ、一つの文字として扱われます。そうでない場合、 ``\`` は特殊文字とはなりません。
42   
43   例:
44
45   * ``\$`` : 文字 ``$`` (通常の文字列として扱われる)
46   * ``\#`` : 文字 ``#`` (通常の文字列として扱われる)
47   * ``\\`` : 文字 ``\`` (通常の文字列として扱われる)
48   * ``c\:\Windows\moo\#boo`` : 文字列 ``c:\Windows\moo#boo``
49
50 .. _labelB.1.3:
51
52 B.1.3 識別子
53 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
54 識別子(変数名) は ``_``, ``-``, ``@`` を含めた、ASCIIの英数字で構成されなければなりません。大文字小文字は区別されるため、以下の識別子は区別されます: ``FOO``, ``Foo``, ``foo`` 。また、識別子の一文字目は条件に当てはまる文字であればなんでも構いません。つまり、数字から始めても構いません。
55
56 ``egrep`` 表記を用いると、識別子の正規表現は以下のようになります。 ::
57
58     identifier ::= [-@~_A-Za-z0-9]+
59
60 以下の識別子はすべて正当です。 ::
61
62     Xyz    hello_world    seventy@nine
63     79-32  Gnus~Gnats     CFLAGS
64
65 以下の識別子は正当ではありません。 ::
66
67     x+y    hello&world
68
69 .. _labelB.1.4:
70
71 B.1.4 コマンド識別子
72 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
73 以下の単語はプログラム行の *最初に* 呼び出された場合に、特別な意味を持つ単語です。そうでない場合、これらの単語は特別な意味を持ちません。 ::
74
75     case     catch  class    declare    default
76     do       else   elseif   export     extends
77     finally  if     import   include    match
78     open     raise  return   section    switch
79     try      value  when     while
80
81 .. _labelB.1.5:
82
83 B.1.5 変数の参照
84 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
85 変数の参照(variable reference)は、 ``$`` 特殊文字を識別子の前に付与することによって指定できます。もし識別子名が一文字より多い文字列であった場合、括弧を使って閉じなければなりません。この括弧を使った表記法は非常によく使われます。以下はすべて正当な変数の参照です。 ::
86
87     $(Xyz)    $(hello_world)   $(seventy@nine)
88     $(79-32)  $(Gnus~Gnats)    $(CFLAGS)
89
90 一文字で変数を参照する場合は、通常の識別文字に加えていくつかの追加修飾子 ``&*<^?[]`` を利用することもできます。以下はすべて正当な変数の参照です。 ::
91
92    $@   $&   $*   $<   $^   $+   $?   $[   $]
93    $A   $_   $a   $b   $x   $1   $2   $3
94
95 .. note::
96    括弧を利用しない変数の参照は、たとえその後にに正当な文字が続いていたとしても、一文字のみに制限されます。例えば、変数 ``$x`` の値が17であった場合、以下の構文は次のように評価されます。 ::
97
98        $x           evaluates to    17
99        foo$xbar     evaluates to    foo17bar
100        foo$(x)bar   evaluates to    foo17bar
101
102 特殊シーケンス ``$$`` はリテラル文字 ``$`` に置き換わります。これはつまり、二文字のシーケンス ``\$`` と ``$$`` は通常の場合等価であることを表しています。
103
104 .. _labelB.1.6:
105
106 B.1.6 文字列定数
107 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
108 リテラル文字列は対応する文字列のデリミタによって定義されます。左の文字列デリミタはダラーサイン ``$`` から始まり、0でない数のシングルクオート、またはマルチクオートを使います。また、文字列は対応するクオーテーションシンボルのシーケンスで終わります。クオーテーションの種類を混ぜることはできません。言い換えると、デリミタは必ずシングルクオートかダブルクオート文字のどちらかでなければいけません。以下の例はすべて正当な文字列です。 ::
109
110     $'Hello world'
111     $"""printf("Hello world\n")"""
112     $''''
113     Large "block" of
114     text # spanning ''multiple'' lines''''
115
116 文字列のデリミタは、文字の内容には *含まれません* 。シングルクオートを用いた場合、文字列の内容は逐語的に解釈されます。言い換えると、この文字列にはなんの特殊文字も含まれていないものと解釈されます。
117
118 ダブルクオートを用いた場合、文字列の内容に ``$`` シンボルを用いて式の評価を含めることができます。以下にいくつかの例を示します。 ::
119
120
121     X = Hello
122     Y = $""$X world""             # Hello world
123     Z = $'''$X world'''           # $X world
124     I = 3
125     W = $"6 > $(add $I, 2)"       # 6 > 5
126
127 .. note::
128    OMakeでは、 ``$`` を付与していないクオーテーションシンボルは特別なものとして扱われません。この場合、クオーテーションシンボルはシーケンスに含まれます。 ::
129
130         osh>println('Hello world')
131         'Hello world'
132         osh>println($'Hello world')
133         Hello world
134         osh>X = Hello
135         - : "Hello" : Sequence
136         osh>println('$X world')
137         Hello world
138
139 .. _labelB.2:
140
141 B.2 OMakeの語彙規則
142 ---------------------------------------
143
144 .. _labelB.2.1:
145
146 B.2.1 式
147 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
148
149 .. _labelB.2.1.1:
150
151 B.2.1.1 インライン参照
152 """""""""""""""""""""""""""""""""""""""
153
154 .. _labelB.2.2:
155
156 B.2.2 構文とプログラム
157 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
158
159 .. _labelB.2.2.1:
160
161 B.2.2.1 特殊構文
162 """""""""""""""""""""""""""""""""""""""
163
164 .. _labelB.2.2.2:
165
166 B.2.2.2 変数定義
167 """""""""""""""""""""""""""""""""""""""
168
169 .. _labelB.2.2.3:
170
171 B.2.2.3 参照と関数定義
172 """""""""""""""""""""""""""""""""""""""
173
174 .. _labelB.2.2.4:
175
176 B.2.2.4 オブジェクト
177 """""""""""""""""""""""""""""""""""""""
178
179 .. _labelB.2.2.5:
180
181 B.2.2.5 ルール
182 """""""""""""""""""""""""""""""""""""""
183
184 .. _labelB.2.2.6:
185
186 B.2.2.6 シェルコマンド
187 """""""""""""""""""""""""""""""""""""""
188
189 .. _labelB.3:
190
191 B.3 ダラー修飾子
192 ---------------------------------------