给定一个语法和附加的动作代码,是否有任何标准解决方案来推断每个产生式需要产生什么类型(因此,调用产生式应该期望从中得到什么类型)?
我正在考虑使用类似于 c#var
语法的 OO 程序和操作代码(但我不是在寻找特定于 c# 的东西)。
如果不是函数重载和递归语法,这将是相当简单的。
像这样的情况会出现问题:
Foo ::=
Bar Baz { return Fig(Bar, Baz); }
Foo Pit { return Pop(Foo, Pit); } // typeof(foo) = fn(typeof(Foo))