NOTE 形式構文 BNF

2004-04-02 Kenzi NOIKE

これは,NOTE 形式の構文の BNF である.
単なる字句解析用の構文規則であり,意味的な整合性は,規則に含めていない.

凡例 [, ], {, }, ]..., }..., は,超記号 (Meta symbol).
[, ], {, }, は,記号(literal).(終端記号 (Terminal symbol)).

[ ]... は,0 回以上の繰返し.
{ }... は,1 回以上の繰返し.

NOTE形式 =
[ 空行 | コメント行 ]...
ヘッダ
[ 空行 | コメント行 ]...
[ ボディ ]
[ 空行 | コメント行 ]...
{ END ポストアンブル | End_Of_File }
ヘッダ =
Header [空白系文字]... { [空白系文字]... [コメント] 改行文字
ヘッダ情報
} [空白系文字]... [コメント] 改行文字
ヘッダ情報 = {
[空白系文字]... BEAT情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... BPM情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... BEATTIME情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... TACTUS情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... TIMSCALE情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... TITLE情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... COMPOSER情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... PERFORMER情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... ACCOMPANIST情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... ARRANGER情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... GENERATOR情報 [空白系文字]... [コメント] 改行文字 |
空行 |
コメント行
}...

BEAT情報 =
BEAT {空白系文字}... 拍子分子 [空白系文字]... / [空白系文字]... 拍子分母
拍子分子 =
整数
拍子分母 =
整数

BPM情報 =
BPM {空白系文字}... BPM値 {空白系文字}... BPM基準拍
BPM値 =
小数
BPM基準拍 =
音価文字列

BEATTIME情報 =
BEATTIME {空白系文字}... 拍あたり時間 {空白系文字}... BEATTIME基準拍
拍あたり時間 =
小数
BEATTIME基準拍 =
音価文字列

TACTUS情報 =
TACTUS {空白系文字}... 拍打回数 {空白系文字}... TACTUS基準拍
拍打回数 =
整数
TACTUS基準拍 =
音価文字列

TIMSCALE情報 =
TIMESCALE {空白系文字}... 時間表現形式
時間表現形式 =
Beat |
Real |
Meas |
Delta 時間分解能値
時間分解能値 =
整数

TITLE情報 =
TITLE {空白系文字}... " 文字列 "

COMPOSER情報 =
COMPOSER {空白系文字}... " 文字列 "

PERFORMER情報 =
PERFORMER {空白系文字}... " 文字列 "

ACCOMPANIST情報 =
ACCOMPANIST {空白系文字}... " 文字列 "

ARRANGER情報 =
ARRANGER {空白系文字}... " 文字列 "

GENERATOR情報 =
GENERATOR {空白系文字}... " 文字列 "

ボディ = {
[空白系文字]... 小節線情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... メモ情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 { {空白系文字}... {音符休符情報}... }... [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... ペダル情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... PAUSE情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... TIMESHIFT情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... MIDI情報 [空白系文字]... [コメント] 改行文字 |

[空白系文字]... スタート時刻 {空白系文字}... BEAT情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... BPM情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... BEATTIME情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... TACTUS情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... TITLE情報 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... COMPOSER情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... PERFORMER情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... ACCOMPANIST情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... ARRANGER情報 [空白系文字]... [コメント] 改行文字 |
[空白系文字]... スタート時刻 {空白系文字}... GENERATOR情報 [空白系文字]... [コメント] 改行文字 |
空行 |
コメント行
}...

小節線情報 =
= [空白系文字]... 小節番号 [ {空白系文字}... 反復記号 ]...
小節番号 =
整数
反復記号 =
|: |
:| |
||

メモ情報 =
! {空白系文字}... " 文字列 "

音符休符情報 =
( [空白系文字]... [On_diff {空白系文字}... ] [Ident {空白系文字}... ] {Pitch {空白系文字}... } [On_vel {空白系文字}... ] {Len {空白系文字}... } [Len_diff {空白系文字}... ] [Off_vel {空白系文字}... ] [finger {空白系文字}... ] )
On_diff =
小数
Ident =
文字列
Pitch =
音高文字列
音高文字列 =
音高文字 [臨時記号] オクターブ文字 |
休符文字
音高文字 =
C | D | E | F | G | A | B |
臨時記号 =
# | b | x | bb
休符文字 =
Rest
On_vel =
整数
Len =
小数
Len_diff =
小数
Off_vel =
整数
finger =
f 右左 整数
右左 =
R| L| _

ペダル情報 =
ペダル種類 {空白系文字}... ペダル踏度
ペダル種類 =
Damper | Sostenuto | Soft |
ペダル踏度 =
整数

PAUSE情報 =
PAUSE {空白系文字}... PAUSE時間
PAUSE時間 =
小数

TIMESHIFT情報 =
TIMESHIFT {空白系文字}... TIMESHIFT時間
TIMESHIFT時間 =
小数

MIDI情報 =
MIDI { {空白系文字}... 16進数2桁文字 }...
16進数2桁文字 =
16進数文字 16進数文字
16進数文字 =
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f

整数 =
[ + | - ] { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }...
小数 =
[ [ + | - ] { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }... ] . { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }...
コメント =
% [ 改行文字以外のあらゆる文字 ]...
ポストアンブル =
[ あらゆる文字 ]...
音価文字列 =
整数 [ . [ . ] ]
文字列 =
[ " と改行文字以外の文字 ]...
空行 =
[ 空白系文字 ]... 改行文字
コメント行 =
[ 空白系文字 ]... コメント 改行文字
空白系文字 =
空白(' ', 0x20) | タブ('\t',0x09) | 全角空白
改行文字 =
CR+LF (0x0d, 0x0a) | LF+CR (0x0a, 0x0d) | CR (0x0d) | LF (0x0a)
End_Of_File =
ファイル終端 | Ctrl-D (0x04) | Ctrl-Z (0x1a)

ご意見・ご感想・リンク希望などは noike@ksc.kwansei.ac.jp までメールで、または、 掲示板 まで、お気軽にどうぞ。

リンクを張ってくださる方は,このバナー NOIKE's banner http://noike.info/~kenzi/noike_bn.png に 直接リンクをお張りください.