From 22f96694a96ed9fba169e77bc27d19d00edca083 Mon Sep 17 00:00:00 2001 From: tanaka takashi Date: Sun, 12 Jul 2026 16:03:29 +0900 Subject: MML構文解析処理を追加 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/MML_BNF.md | 232 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 doc/MML_BNF.md (limited to 'doc/MML_BNF.md') diff --git a/doc/MML_BNF.md b/doc/MML_BNF.md new file mode 100644 index 0000000..3657ecd --- /dev/null +++ b/doc/MML_BNF.md @@ -0,0 +1,232 @@ +# 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) を参照。 -- cgit v1.2.3