変換規則定義文を上から辿っていき、順に変換規則を適用することによりakrantiainは動作する。
故に、変換規則定義文の順番を入れ替えると動作が変わる可能性があるが、一方識別子定義文や環境指定文の位置や順序はakrantiainの動作に一切影響を与えない。
行末は文の境目である。行をまたいで1文を定義することはできない。
逆に、文末のセミコロンは、行の最後および行コメントの直前では省略できる。また、
}
の前でも省略できる。
}
の前でも省略できる。
#
から行末までに書かれたものは無視される。ただし、文字列リテラルおよびスラッシュリテラル内の#
はコメントを意味しない。
識別子 = 1個以上の文字列リテラル | 1個以上の文字列リテラル | 1個以上の文字列リテラル | 1個以上の文字列リテラル;
例としては、こんな感じである。
sample = "foo" | "bar" "baz" | "foobar";
sample
が"foo"
、"bar" "baz"
、"foobar"
の3つのどれかにマッチするパターンとして定義される。
_
)が0個以上続いたものである。識別子を数字や_
で始めることはできない。
PUNCTUATION
がある。例えばPUNCTUATION = "." | "," | "!" | "?";
と定義すると、akrantiainはこれらの文字を句読点と認識する。
This is a pen.
という文において、n
の字は語末なのだということをakrantiainに認識させるのに必要である。
"foo"
)をPUNCTUATION
の定義で用いた時の挙動は未定義である。これは不具合であり、後のバージョンで修正される予定である。
SELECT
を^
または「1つの識別子」または「1個の文字列リテラル」または( 1個以上の文字列リテラル | 1個以上の文字列リテラル | 1個以上の文字列リテラル )
とし、
CONDITION
はSELECT
に!
を前置したものとする。
PHONEME
は$
かスラッシュリテラル
とする。
0または1個のCONDITION 1個以上のSELECT 0または1個のCONDITION -> 1個以上のPHONEME;
SELECT
」を構成するSELECT
のうち^
以外のものの個数と、「1個以上のPHONEME
」を構成するPHONEME
の個数は一致している必要がある。不一致の場合エラーが発生する。
PHONEME
」を構成するPHONEME
が全て$
であると、エラーが発生する。
"u" "g" !vowel -> /u/ /u/;
"u"
の後に文字列"g"
があり、直後がパターンvowel
にマッチしないとき、"u"
を/u/
に、"g"
も/u/
に変換する」という規則が定義される。
->
を構成する-
と>
の間にスペースを入れることはできない。
^
は語の境界にマッチするパターンである。$
は「特に変換先のスラッシュリテラルを指定せず、別の規則によって変換させる」ことを表す。
^
と$
の例としては、こんな感じである。
"n" ^ ("m"|"p") -> /m/ $
"n"
の後に語境界があり、その後に("m"|"p")
にマッチする文字列があるとき、
"n"
を/m/に置き換え、("m"|"p")
にマッチした文字列については保留し、後に登場する規則に委ねる」という規則が定義される。
PUNCTUATION
の定義に用いられた文字列リテラル内の文字、および空白文字を含んでいる文字列リテラルを変換規則定義文で直接的または(定義された識別子を通じて)間接的に使用することは禁じられている。
@ 識別子 ;
識別子
により指定された挙動に変更することを示す文である。同一の環境指定が複数あってもエラーではない。
@ uSe_NFd ;
は @ USE_NFD ;
と完全に等価である。
環境指定識別子 | 意味 |
CASE_SENSITIVE | 変換元において大文字と小文字を区別する |
FALL_THROUGH FALLTHROUGH FALL_THRU FALLTHRU | 入力文字列の中で変換規則に消費されなかったものをエラーとせず素通りさせる |
USE_NFD | アクセント付き文字を、「アクセント無しの文字+アクセント記号」として処理することなどができるようになる |
"
で始まり"
で終わり、内部に改行を含むことはない。
"
という文字自体を含む文字列を文字列リテラルとして表現するには、文字列中の"
を文字列リテラル内で\"
と表記する必要がある。
\
という文字を含む文字列を文字列リテラルとして表現するには、文字列中の\
を文字列リテラル内で\\
と表記する必要がある。
\u
に続き16進数(0
~9
, A
~F
, a
~f
)4桁で書くことでも表現できる。
CASE_SENSITIVE
を指定する必要がある。
/
で始まり/
で終わり、内部に改行を含むことはない。
/
という文字自体を含む文字列をスラッシュリテラルとして表現するには、文字列中の/
をスラッシュリテラル内で\/
と表記する必要がある。
\
という文字を含む文字列をスラッシュリテラルとして表現するには、文字列中の\
をスラッシュリテラル内で\\
と表記する必要がある。
\u
に続き16進数(0
~9
, A
~F
, a
~f
)4桁で書くことでも表現できる。