понедельник, 11 октября 2004 г.

Компилятор моего языка сдвинулся с мертвой точки. Первые шаги в type inference.

Несмотря на то, что вся документация по проблеме типизации жутко академическая и читать её почти невозможно....
Написание компилятора хоть чуть-чуть, но сдвинулось с мертвой точки. Теперь, помимо создания AST, производится еще и типизация. Правда там кругом stub'ы. Типизация простых выражений (констант) работает. Также работает type checker.
if 1 then 2 else 3
>>> Fatal error: exception Failure("Can't unify: expected bool, but found int")

666
>>> impl_file:
>>> 7.0 - 7.3: 4>int: VE_int: 666

1.0
>>> impl_file:
>>> 7.0 - 7.3: 4>float: VE_float: 1.000000e+00

(666)
>>> impl_file:
>>> 7.0 - 7.5: 4>int: VE_paren:
>>> 7.1 - 7.4: 4>int: VE_int: 666

Теперь нужно сделать нормальный typing environment... ужас. :[]