Учитывая грамматику и прилагаемый код действия, есть ли какое-либо стандартное решение для определения того, к какому типу должен приводить каждый продукт (и, следовательно, какой тип должен вызывать вызывающий продукт)?
Я имею в виду ОО-программу и код действия, которые используют что-то вроде синтаксиса c # var
(но я не ищу что-то специфичное для c #).
Это было бы довольно просто, если бы не перегрузка функций и рекурсивные грамматики.
Проблема возникает с такими случаями:
Foo ::=
Bar Baz { return Fig(Bar, Baz); }
Foo Pit { return Pop(Foo, Pit); } // typeof(foo) = fn(typeof(Foo))