This paper addresses the problem of creating abstract transformers automatically. The method we present provides the basis for creating a tool to automate the construction of program analyzers in a fashion similar to the way yacc automates the construction of parsers. Our method treats the problem as a program-synthesis problem. The user provides specifications of (i) the concrete semantics of a given operation O, (ii) the abstract domain A to be used by the analyzer, and (iii) the semantics of a domain-specific language L in which the abstract transformer is to be expressed. As output, our method creates an abstract transformer for O for abstract domain A, expressed in DSL L. We implemented our method, and used it to create a set of replacement abstract transformers for those used in an existing analyzer, and obtained essentially identical performance. However, when we compared the existing transformers with the generated transformers, we discovered that two of the existing transformers were unsound, which demonstrates the risk of using manually created transformers.
翻译:本文探讨自动创建抽象变压器的问题。 我们介绍的方法为创建程序分析器的自动构造工具提供了基础, 工具的构造方式类似于 yacc 将剖析器的构造自动化的方式。 我们的方法将问题作为程序合成问题处理。 用户提供了以下规格:(一) 特定操作O 的混凝土语义, (二) 分析器将使用的抽象域A 和 (三) 用于表达抽象变压器的域语言L 的语义。 作为输出, 我们的方法为抽象域A 的 O 创建了一个抽象变压器, 以 DSL 表示。 我们应用了我们的方法, 并用它为现有分析器中所使用的变压器创建了一套替换抽象变压器, 并获得了基本相同的性能。 但是, 当我们将现有的变压器与生成的变压器进行比较时, 我们发现两个现有变压器不正确, 这表明使用手动变压器的风险 。