Внутренние правила в BNFC для синтаксически направленного перевода?

BNFC позволяет использовать "внутренние" правила для помощи в синтаксически направленном переводе. Канонический пример, который они дают, для аннотации типа

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

Это дает нам новую часть AST,

Exp = ... | VarT Ident Type

Это прекрасно работает! Однако было бы неплохо, если бы можно было разрешить помещать туда произвольный тип в качестве заполнителя на будущее.

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

И мы бы сгенерировали параметрический тип данных

Exp a = ... | VarT Ident a

Затем мы могли бы заполнить это типом (для проверки типов) или сегментом кода (для генерации кода).

0 ответов

Другие вопросы по тегам