= 字句規則 =
== 文字コード == #charset
ソースファイルの文字コードは UTF-8 でなければなりません
改行コードは CRLF および LF に対応しています。CR には対応していません
== 空白文字 == #spaces
半角スペース、改行 ({{{\n}}}、{{{\r}}})、タブ ({{{\t}}})、{{{\v}}}、{{{\f}}}、およびコメントは空白文字として扱われます
== コメント == #comments
コメントはコンパイラーによって無視され、単一の空白文字として扱われます。YAMML では C++、C#、!JavaScript などと同じく 2 種類のコメントが使えます
ブロックコメントは {{{/*}}} から {{{*/}}} までの部分です。複数行にわたってコメントとすることができますが、入れ子にすることはできません
{{{
コメントではない /* コメント */ コメントではない
/*
複数行の
コメント
*/
/* /* コメント */ ここはコメントではない */
}}}
行コメントは {{{//}}} から行末までの部分です。行末に {{{\}}} を書いても次行をコメントとすることはできません
{{{
// 行コメント
}}}
== 識別子 == #identifiers
識別子は、以下の文字を 1 個以上並べたものです。識別子の長さは、メモリが許すかぎりいくらであってもかまいません
* 大文字・小文字アルファベット ({{{A}}}-{{{Z}}}, {{{a}}}-{{{z}}})
* 数字 ({{{0}}}-{{{9}}})
* アンダースコア ({{{_}}})
* [http://en.cppreference.com/w/cpp/language/identifiers#Unicode_characters_in_identifiers C++ で識別子に使える Unicode 文字]
ただし、識別子の先頭の文字には、以下の文字は使えません
* 数字 ({{{0}}}-{{{9}}})
* [http://en.cppreference.com/w/cpp/language/identifiers#Unicode_characters_in_identifiers C++ で識別子の先頭に使えない Unicode 文字]
識別子の大文字と小文字は区別されます。{{{FOO}}}、{{{Foo}}}、{{{foo}}} はすべて異なる識別子として扱われます
== リテラル == #literals
リテラルは値を直接あらわすための構文です。YAMML では以下の 3 種類のリテラルが使えます
=== 整数リテラル === #integer_literals
整数リテラルは、符号つき整数をあらわします。正の数は 0 以外の数字、負の数は {{{-}}} につづく 0 以外の数字ではじめ、10 進法で表記します ({{{123}}}、{{{-54}}} など)
0 はそのまま {{{0}}} と表記します
=== 文字列リテラル === #string_literals
文字列リテラルは、文字列をあらわします。あらわしたい文字列をダブルクォート ({{{"}}}) またはシングルクォート ({{{'}}}) でくくって表記します ({{{"Foo"}}}、{{{'The quick brown fox jumps over the lazy dog.'}}} など)
文字列リテラル内ではエスケープシーケンスが使えます。[http://en.cppreference.com/w/cpp/language/escape C++ で利用可能なもの]のうち `\''nnn''` を除いたすべてのエスケープシーケンスを使用できます
=== 識別子リテラル === #identifier_literals
識別子リテラルは、識別子の要件をみたす文字列を、引用符を用いずにあらわすことができます