0

BNFC 允许使用“内部”规则来帮助进行语法定向翻译。他们给出的典型例子是类型注释

internal VarT . Exp ::= "(" Ident ":" Type ");

这为我们提供了 AST 的新部分,

Exp = ... | VarT Ident Type

这很好用!但是,如果可以允许将任意类型作为占位符放在那里以供以后使用,那将是非常好的。

internal VarT . Exp ::= "(" Ident ":" a ")";

我们将生成一个参数数据类型

Exp a = ... | VarT Ident a

然后我们可以用类型(用于类型检查器)或代码段(用于代码生成)填充它。

4

0 回答 0