@article{oai:ipsj.ixsq.nii.ac.jp:00220216,
 author = {馬谷, 誠二 and Seiji, Umatani},
 issue = {4},
 journal = {情報処理学会論文誌プログラミング(PRO)},
 month = {Sep},
 note = {Lisp系言語は,少数の特殊形式だけからなるコア言語と,その他多数の構文を実現するためのマクロから構成され,マクロを使用したコードも最終的には特殊形式だけからなるコードへと変換されてから評価される.そのため,原理的には,実行時の振舞いを解析するには特殊形式だけを対象にした解析手法を用いれば十分といえる.しかし,実行コードを生成するマクロ定義を解析できると,デバック時などソフトウェア開発段階において有用である.Scheme言語をベースとするLisp系言語の1つであるRacket言語では,コードに対する低レベルな操作をRacket自身で記述するsyntax-caseを使用できる.さらに,Racketには局所的マクロ展開,定義文脈といったマクロ展開処理をコントロールするための機能,syntax-introduceといったスコープ健全性を逸脱するための機能が追加されており,マクロ展開の実行モデルは特殊形式の評価モデルと比べかなり複雑なものとなっている.本発表では,マクロ定義にとっての操作対象データである構文オブジェクトを適切に抽象化することに加え,マクロ展開の実行モデルの内部構造を抽象化することにより,マクロ定義コードを含めた解析が可能な抽象解釈器の構築を試みる., A variant of Lisp languages is typically composed of a core language consisting of only a few special forms and macros for realizing many other constructs. A program using macros is eventually transformed into code consisting only of special forms before evaluation. Therefore, in principle, it is sufficient to use analysis methods that target only special forms to analyze its runtime behavior. However, it would be helpful in software development, such as debugging, if macro definitions that generate the executable code could be analyzed. The Racket language, a Lisp language based on the Scheme language, can use syntax-case to describe low-level code operations in Racket itself. In addition, Racket provides several constructs to control the macro expansion process, such as local macro expansion, definition context, and functions to deviate from scope hygiene, such as syntax-introduce. This makes the execution model of macro expansion much more complex than that of special-form evaluation models. In this presentation, we attempt to construct an abstract interpreter for analyzing Racket programs with macro definitions by appropriately abstracting the syntax objects that are manipulation targets of macro definitions and appropriately abstracting the execution model of macro expansion.},
 pages = {1--1},
 title = {Racket言語のための抽象解釈に向けて},
 volume = {15},
 year = {2022}
}