DSL
エラー処理(Handling Errors) †
一言要約 †
DSLスクリプトは小さい為、、行番号くらいでも十分。
エラーを検知する為に、意味論モデルを使うのは良い。
要約 †
- DSLスクリプトは小さい為に、粗雑なエラー検出技術が汎用目的の言語がもっている検出技術よりも有効性がある。
- 外部DSLを使用している場合は、コメントをサポートしている事を確認しなさい。
- エラー処理が行われる箇所はモデルとパーサー。
- 意味論エラーは解析とモデル間で処理されなければならない。
- 意味論モデルで処理する場合の長所は、意味的によく練られた構造に関するルールを判定するにはふさわしい事。
- 意味論モデルで処理する場合の短所は、DSLスクリプト内で問題となっているソースへ導くリンクや、大凡の行番号さえない事。
- 前述の欠点を克服する為の、最も良さそうな方法は、エラーを検知する為に、意味論モデルを使う事。
- エラー処理について有効な方法は、開始、検知、報告に分割すること。、その場合、開始をパーサー、検知をモデル内に組み込み、エラーに関する意味論を提供しているモデルとパーサーの両者から報告すること。
ファウラーへのフィードバック †
担当者のつぶやき †
- 無機質な構造についてのルールを判定するなら、パーサーで十分かと思うが、「意味的に」というのがモデルで構造の正当性を判定する理由なんでしょうかね?
- 何故、行番号が分からない?@「意味論モデルで処理する場合の短所は、DSLスクリプト内で問題となっているソースへ導くリンクや、大凡の行番号さえない事。」
- 分割された後、具体的に何をしているのかイメージ出来ない@「エラー処理について有効な方法は、開始、検知、報告に分割すること。その場合、開始をパーサー、検知をモデル内に組み込み、エラーに関する意味論を提供しているモデルとパーサーの両者から報告すること。」
みんなの突っ込み †
- 意味論モデルは通常、DSL構文から独立して作られるので、意味論モデルからは構文に関するいかなる情報も得られない、という話なんだと思います。<なぜ行番号がわからないか -- kentaro714?
- これまでの結論のまとめ的な話だと思います。<開始はパーサ、検知は意味論モデル、報告は両方 -- kentaro714?
- 流れでいうと、まずはパーサがエラーチェックのトリガを引きます。よって、パーサは今自分がどのあたりのチェックをしようとしているか、ある程度わかっているはずです。で、エラーチェック自体は意味論モデルにまかせます。validate()とか呼ぶんでしょうかね。で、エラーがあった場合、エラーの詳細な(モデル的/意味的な)情報は意味論モデルから、場所に関する情報はパーサから引き出して、まとめてユーザーに通知する、という感じだと思います。たぶん。 -- kentaro714?