从语法生成句子的常用方法是什么?
我想要一种与解析器相反的算法。也就是说,给定一个正式的上下文无关语法(比如 LL),我想生成一个符合该语法的任意句子。我在这里使用句子来表示任何有效的文本主体,因此它实际上可以是一个完整的程序(即使它没有任何意义——只要它在语法上是正确的)。
示例语法:
program : <imports> NEWLINE? <namespace>
imports : ("import" <identifier> NEWLINE)*
namespace : "namespace " <identifier> NEWLINE "{" <classes> "}"
identifier: (A-Za-z_) (A-Za-z0-9_)*
...
示例生成程序:
import jkhbhhuob
import aaaaa888_
namespace u8nFGubgykb
{ class ui0op_np { ... }
}