# 6.5生成工具

生成工具可以根据抽象描述生成任何工件。例如:\
• 基于UML类模型的不同编程语言中的类和方法体\
• 基于数据模型的特定数据库系统的 SQL 或 DDL 语句，以及测试数据或数据访问模块\
• 基于形式语法的词法分析器和解析器\
• 能够基于 XML 模式定义（XSD）读取或写入 XML 模式的编程语言的类或函数\
• 来自源代码文档\
• 来自文本描述的JPG, PNG或矢量图形图像

#### &#xD;6.5.1需求和决策标准

• 独立于目标平台和生成工件的格式\
• 独立于输入数据/工件的元模型\
• 转换过程的灵活性\
• 安全关键应用的认证。

#### &#xD;6.5.2代码生成器面临的挑战

自由可定义的元模型和生成规则提供了更高的灵活性,但牺牲了简单性。

#### &#xD;6.5.3 示例

• ANTLR(开源解析器生成器)\
• AndroMDA(开源)\
• openArchitectureWare(开源)\
• 许多建模工具可以从模型或图表生成工件。这里的示例是数据库结构，如表和视图。\
• 实现级的约定优于配置框架，如Ruby on Rails、Grails和Spring Roo也属于这一类，因为它们根据抽象描述生成(代码)工件。
