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