元编程

示例

这是一个简单的使用bash脚本编写的元程序示例，同时也是一个生成式编程的例子：
#!/bin/bash# metaprogramecho '#!/bin/bash' >program
for ((I=1; I<=992; I++)) do
    echo "echo $I" >>program
done
chmod +x program
这个脚本（或程序）生成了一个新的993行的程序来打印输出数字1至992。这只是一个怎样用代码来编写更多代码的示例；但并不是打印一串数字最有效的方法。尽管如此，一个程序员可以在几分钟内编写和执行这个元程序，却生成了近1000行的代码。
不是所有的元编程都需要产生式编程。如果一个程序可以在运行时改变或者可以使用增量编译（如Lisp、Forth、Perl、Python、REBOL、Smalltalk、Ruby、PHP、Tcl、Lua、Groovy、Frink和JavaScript），那么就可以在不实际生成源代码的情况下使用这种技术实现元编程。
最常见的元编程工具是编译器，它可以将程序员使用高级语言编写的相对短小的程序转换为等价的汇编语言或者机器语言程序。这是最基础的编程工具，在大多数情况下，直接编写机器语言程序是不太现实的。
编译器能够将一种语言转换为另一种，而其它元编程系统则允许以编程方式操纵一种语言。宏系统即是这样一种简单的系统。在 Microsoft Office© 的程序中，宏可以记录一些特定的按键组合，并重新执行。另一方面，这些可执行代码可以通过点击宏选择界面的“编辑”按钮获得。
LISP恐怕是具备元编程能力的典范语言，不仅因为它在历史上优先发展，更由于它的元编程的简洁与强大。在Lisp元编程中，准引用操作符（通常是一个逗号）引入的代码是在程序定义时而不是运行时被赋值。元编程语言因此等价于主编程语言，并且在需要的时候，已经存在的Lisp例程还可以直接重用于元编程。
在程序中嵌入直接处理程序数据的解释器即可实现这一目的。现在已经有一些用于常用高级语言的实现，例如RemObject为Object Pascal编写的Pascal Script。
另一个很常用的元编程例子是lex和yacc，这两个工具用来生成词法分析器和语法分析器。Yacc通常用作编译器的编译器，生成能够将高级语言转换为机器语言的工具。
自产生程序是一种源代码等于输出的特殊的元程序。面向语言的程序设计是一种强烈关注元编程的编程风格，通过领域特定语言来实现。

宏用于产生式编程

IBM System/360及其派生物拥有强大的汇编宏工具，通常用于生成完整的程序或者程序片段（比如针对不同操作系统）。CICS事务处理系统也提供了汇编宏，可以生成用于预处理阶段的COBOL语句。