# MML 構文規則(BNF) > 本ドキュメントは `mml-composemusic-mcp` がサポートする MML の構文を BNF(Backus-Naur Form)で定義する。 > 対象モード: `ppmck`(PPMCK インスパイア形式)と `pyxel`(Pyxel MML 準拠)。 --- ## 1. 共通字句要素 ```bnf /* 基本文字 */ ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ::= + /* 音符名(Lexer で正規化: ppmck は小文字、pyxel は大文字 → 内部は小文字) */ ::= "c" | "d" | "e" | "f" | "g" | "a" | "b" /* 変化記号 */ ::= "+" | "#" ::= "-" ::= | /* 音長 */ ::= "." ::= * | /* 省略時: デフォルト音長を使用 */ /* オクターブ */ ::= ">" ::= "<" /* タイ・スラー */ ::= "&" /* リピート */ ::= "[" ::= "]" ? /* 小節線 */ ::= "|" /* 改行・空白 */ ::= " " | "\t" | "\r" | "\n" ``` --- ## 2. ppmck モード ### 2.1 全体構造 ```bnf ::= * * ::= "#" ? ::= "TITLE" | "COMPOSER" | "PROGRAMER" | "OCTAVE-REV" | "INCLUDE" | "EX-DISKFM" | "EX-NAMCO106" | "BANK-CHANGE" | "EFFECT-INCLUDE" ::= "\"" "\"" ::= * ::= "A" | "B" | "T" | "N" | "L" | /* 第2段階: 複合ヘッダー "ACE" 等 */ ``` ### 2.2 ステートメント ```bnf ::= | | | | | | | | | | | | ::= ? ::= "r" ::= "o" /* o0 〜 o7 */ | | ::= "l" /* l1 〜 l192 */ ::= "v" /* v0 〜 v15 */ ::= "q" /* q0 〜 q3, Pulse系のみ */ ::= "t" /* t1 〜 */ ::= ( | | ) ::= ";" ``` ### 2.3 第2段階予定コマンド(未実装、BNF に含める) ```bnf ::= | | | | | | | ::= ? "%" ::= "@v" "=" "{" "|" ? "}" ::= "@v" ::= "@" "=" "{" "|" ? "}" ::= "s" "," ::= "[" + "]" ? ::= "K" ::= "m" ::= (","? )* ``` --- ## 3. pyxel モード ### 3.1 全体構造 ```bnf ::= * ::= * ::= ":" /* 0: 1: 2: 3: */ ``` ### 3.2 ステートメント ```bnf ::= | | | | | | | | | | | | | | | ::= ? ::= "R" ::= "O" /* O0 〜 O7 */ | | ::= "L" /* L1 〜 L192 */ ::= "V" /* V0 〜 V127 */ ::= "Q" /* Q0 〜 Q100 */ ::= "@" /* @0 〜 @3, Pulse系のみ有効 */ ::= "T" /* T1 〜 */ ::= "K" /* 半音単位 */ ::= "Y" /* セント単位 */ ::= ( | | ) ``` ### 3.3 拡張コマンド(第1段階: IR 保持のみ、合成無視) ```bnf ::= | | ::= "@ENV" ? ::= "{" "," ("," )* "}" | + ::= "@VIB" ? ::= "{" "," "," "}" | + ::= "@GLI" ? ::= "{" "," "}" | + ``` --- ## 4. トラック・チャンネル対応 | ppmck | pyxel | チャンネル | 種別 | |---|---|---|---| | `A` | `0:` | Pulse1 | 矩形波 | | `B` | `1:` | Pulse2 | 矩形波 | | `T` | `2:` | Triangle | 三角波 | | `N` | `3:` | Noise | ノイズ | | `L` | — | Loop | 全体ループ(ppmck のみ) | --- ## 5. 値範囲 | コマンド | 有効範囲 | デフォルト | |---|---|---| | `o` / `O` | 0 〜 7 | 4 | | `l` / `L` | 1 〜 192 | 4 | | `v` (ppmck) | 0 〜 15 | 15 | | `V` (pyxel) | 0 〜 127 | 100 | | `q` (ppmck) | 0 〜 3 | 2 | | `@` (pyxel) | 0 〜 3 | — | | `Q` (pyxel) | 0 〜 100 | 80 | | `t` / `T` | 1 〜 | 120 | --- ## 6. 備考 - 本 BNF は `mml-composemusic-mcp` の**サポート範囲**を定義するものであり、オリジナルの PPMCK や Pyxel の全機能を網羅するものではない。 - 第2段階予定コマンドは BNF に含めるが、第1段階実装では `SEMANTIC_UNSUPPORTED_FEATURE` として警告を返す。 - 詳細な実装アーキテクチャは [Design.md](Design.md) を参照。