[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < 打楽器の音符 ] | [ 上へ : 付表 ] | [ alist (連想配列) > ] |
A.16 技術用語集
LilyPond の内部で用いられる技術的な用語やコンセプトの一覧です。これらはマニュアル、メーリング リスト、ソースコードなどに現れます。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < 技術用語集 ] | [ 上へ : 技術用語集 ] | [ callback (コールバック) > ] |
alist (連想配列)
連想配列 (association list, 縮めて alist) は、キーと値を結びつける Scheme ペアです: ‘(key . value)
’。例えば ‘scm/lily.scm’ には、連想配列 “type-p-name-alist”
があり、型述語 (例えば ly:music?
) と型の名前 (例えば “music”)
を結びつけています。そのため、型チェックに失敗した場合には、型述語に結びついた名前がエラー メッセージに表示されます。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < alist (連想配列) ] | [ 上へ : 技術用語集 ] | [ closure (クロージャ) > ] |
callback (コールバック)
コールバック (callback) はルーチン、関数、メソッドの一種で、他のルーチンの引数にその参照が渡されることで呼び出されるものです。このテクニックを用いて、低レベルのソフトウェア レイヤから高レベルで定義した関数を呼び出すことができます。LilyPond では、コールバックは、低レベルのアクションがどれぐらい実行されるかをユーザ レベルの Scheme コードが定義できるようにするために広く使われています。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < callback (コールバック) ] | [ 上へ : 技術用語集 ] | [ glyph (グリフ) > ] |
closure (クロージャ)
Scheme では、クロージャ (closure) は関数 (通常はラムダ式) が変数として渡された際に作られます。クロージャは、関数のコードと共に、関数における自由変数 (つまり、関数の中で使われているが、関数の外で定義されている変数) の静的束縛 (lexical binding) への参照が含まれます。この関数が異なる引数で再度呼ばれた際、クロージャで捕捉された自由変数の束縛が、 計算で使用される自由変数の値を得るために使われます。クロージャの便利な性質の一つは、内部変数の値を複数の呼び出しの間で保持できることです。これにより、状態を保存することができます。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < closure (クロージャ) ] | [ 上へ : 技術用語集 ] | [ grob (グラフィカル オブジェクト) > ] |
glyph (グリフ)
グリフ (glyph) は印刷される文字一つ一つの形、あるいは複数の文字が組み合わされて合字となった際の形を表します。あるスタイルや形のグリフが集まってフォントを形成し、いくつかのスタイルやサイズのフォントが集まると書体となります。
参照
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < glyph (グリフ) ] | [ 上へ : 技術用語集 ] | [ immutable (イミュータブル) > ] |
grob (グラフィカル オブジェクト)
LilyPond のオブジェクトの内、
符頭、符幹、スラー、タイ、運指、音部記号などの、印刷される出力におけるアイテムを表すものは、‘レイアウト オブジェクト’
(‘layout object’) またはよく グラフィカル オブジェクト
(‘GRaphical OBject’, 略して grob) と呼ばれます。これらは Grob
クラスのインスタンスとして表されます。
参照
学習マニュアル: Objects and interfaces, Naming conventions of objects and properties, Properties of layout objects
内部リファレンス: grob-interface, All layout objects
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < grob (グラフィカル オブジェクト) ] | [ 上へ : 技術用語集 ] | [ interface (インターフェイス) > ] |
immutable (イミュータブル)
イミュータブルな (immutable) オブジェクトは、生成された後にも状態を変更できるミュータブル オブジェクトとは異なり、生成された後は状態を変更できないオブジェクトを指します。
LilyPond では、イミュータブル プロパティまたは共有プロパティはデフォルトのスタイルや Grob の挙動を定義します。これらは多くのオブジェクトの間で共有されます。名前に反して実際には
\override
や \revert
で変更することができます。
参照
記譜法リファレンス: mutable (ミュータブル)
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < immutable (イミュータブル) ] | [ 上へ : 技術用語集 ] | [ lexer (字句解析器) > ] |
interface (インターフェイス)
複数の Grob で共通のアクションやプロパティは、grob-interface
あるいは短く‘インターフェイス’ (‘interface’) と呼ばれるオブジェクトにまとめられます。
参照
学習マニュアル: Objects and interfaces, Naming conventions of objects and properties, Properties found in interfaces
記譜法リファレンス: レイアウト インターフェイス
内部リファレンス: Graphical Object Interfaces
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < interface (インターフェイス) ] | [ 上へ : 技術用語集 ] | [ mutable (ミュータブル) > ] |
lexer (字句解析器)
字句解析器 (lexer) は、文字列をトークンの列に変換する、字句解析を行うプログラムです。LilyPond の字句解析器は、‘.ly’ ファイルから取得されるストリームをトークン化したストリームに変換し、構文解析という次の処理により適した形にします。構文解析については parser (構文解析器、パーサ) を参照してください。LilyPond の字句解析器は Flex を用いて、字句に関する規則を定義したファイル ‘lily/lexer.ll’ から作られます。このファイルはソース コードの一部であり、LilyPond のバイナリには含まれていません。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < lexer (字句解析器) ] | [ 上へ : 技術用語集 ] | [ output-def (出力定義クラス) > ] |
mutable (ミュータブル)
ミュータブルな (mutable) オブジェクトは、生成された際に状態が固定されるイミュータブル オブジェクトとは異なり、生成された後にも状態を変更できるオブジェクトを指します。
LilyPond では、ミュータブル プロパティは Grob ごとに固有の値を保持するために用いられます。通常、他のオブジェクトのリストや、計算結果がミュータブル プロパティに格納されます。
参照
記譜法リファレンス: immutable (イミュータブル)
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < mutable (ミュータブル) ] | [ 上へ : 技術用語集 ] | [ parser (構文解析器、パーサ) > ] |
output-def (出力定義クラス)
Output-def
クラスのインスタンスは、出力ブロックに関連したデータ構造やメソッドを保持します。インスタンスは midi, layout, paper
ブロックに対して作られます。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < output-def (出力定義クラス) ] | [ 上へ : 技術用語集 ] | [ parser variable (パーサ変数) > ] |
parser (構文解析器、パーサ)
構文解析器 (parser, パーサ) は、字句解析器によって出力されたトークンの列を文法規則に従ってより大きなグループにまとめていくことによって、その文法的構造を決定します。トークンの列が正しいものであれば、結果はトークンの木構造となり、その根は文法の始端記号になります。結果が得られない場合には入力が誤っており、正しいエラー メッセージが出力されます。文法的なグループと、そのグループを作り上げる LilyPond の文法は、‘lily/parser.yy’ に定義されており、 LilyPond grammar にあるようにバッカス標準形 (Backus Normal Form, BNF) で記述されています。このファイルはプログラムのビルド時に Bison にによって構文解析器を生成する際に用いられます。このファイルはソース コードの一部であり、LilyPond のバイナリには含まれていません。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < parser (構文解析器、パーサ) ] | [ 上へ : 技術用語集 ] | [ prob (プロパティ オブジェクト) > ] |
parser variable (パーサ変数)
これらは Scheme で直接定義される変数です。これらをユーザが直接操作することは、変数のスコープが難解であるため推奨されません。
このような変数が ‘.ly’ ファイル内で変更された場合、変更はグローバルに適用され、明示的に戻さない限り、新たな値がファイルの最後まで保持されます。そのため、後に続く \score
ブロックや、\include
コマンドで読み込まれた外部ファイルの出力に影響します。これは予期しない結果を生み出す可能性があり、複雑なプロジェクトではエラーを追跡するのが難しくなります。
LilyPond は以下のパーサ変数を使用します:
- afterGraceFraction
- musicQuotes
- mode
- output-count
- output-suffix
- partCombineListener
- pitchnames
- toplevel-bookparts
- toplevel-scores
- showLastLength
- showFirstLength
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < parser variable (パーサ変数) ] | [ 上へ : 技術用語集 ] | [ smob (Scheme オブジェクト) > ] |
prob (プロパティ オブジェクト)
プロパティ オブジェクト (PRoperty OBject, 略して prob) は、Prob
クラスのインスタンスであり、ミュータブルまたはイミュータブルなプロパティの連想配列や、それらを操作するメソッドを保持するシンプルな基底クラスです。Music
や Stream_event
クラスは Prob
から派生しています。Prob
クラスは、ページ レイアウトの際にシステム Grob やタイトル ブロックのフォーマットされた内容を保持するためにも生成されます。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < prob (プロパティ オブジェクト) ] | [ 上へ : 技術用語集 ] | [ stencil (ステンシル) > ] |
smob (Scheme オブジェクト)
Scheme オブジェクト (ScheMe OBjects, 略して smob) は、C や C++ オブジェクトを Scheme コードにエクスポートする際に Guile によって用いられます。LilyPond では、Scheme オブジェクトはマクロを用いて C++ オブジェクトから生成されます。Scheme オブジェクトには 2 種類あります: 数値のような単純なイミュータブル オブジェクトを格納するシンプル smob と、自身を持つオブジェクトに用いられる複合 smob です。LilyPond のソース コードがアクセスできる場合、より詳しい情報は ‘lily/includes/smobs.hh’ にあります。
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < smob (Scheme オブジェクト) ] | [ 上へ : 技術用語集 ] | [ 音楽関数の一覧 > ] |
stencil (ステンシル)
ステンシル (stencil) クラスのインスタンスは、印刷に出力されるオブジェクトの情報を保持します。ステンシルは、オブジェクトの縦方向と横方向の大きさを決定するボックスと、評価された際にオブジェクトを出力する Scheme 式からなる シンプルな Scheme オブジェクトです。いくつかのステンシルの Scheme 式を組み合わせて複雑なステンシルを定義することもできます。
stencil
プロパティは、grob-inteface
で定義されており、grob とステンシルを繋ぐ役目を果たします。
参照
内部リファレンス: grob-interface
[ << 付表 ] | [トップ][目次][インデックス] | [ カンニング ペーパー >> ] |
[ < smob (Scheme オブジェクト) ] | [ 上へ : 技術用語集 ] | [ 音楽関数の一覧 > ] |