把文法存成数据
文法也可以当数据存:每条产生式是「左边 → 右边的候选列表」。看 stmt 有几个候选、第一个候选是什么:
G = {
"stmt": [["let", "IDENT", "=", "expr", ";"],
["IDENT", "=", "expr", ";"],
["if", "(", "expr", ")", "block"],
["while", "(", "expr", ")", "block"]],
"block": [["{", "stmt*", "}"]],
}
first = [alt[0] for alt in G["stmt"]]
print(str(len(G["stmt"])) + "/" + ",".join(G["stmt"][0]) + "/" + ",".join(first))
全部评论