Я пишу компилятор в ocaml, используя ocamllex / yacc. Все идет хорошо, но у меня проблема с дизайном. Для каждого создаваемого мной узла AST было бы хорошо иметь информацию о позиции строки / символа этого узла в исходном коде. Это было бы полезно для предоставления сообщений об ошибках пользователю позже.
Теперь я могу добавить некоторый мета-тип в мои узлы:
type node = Node1 of ... * meta | Node2 of ... * meta
но это кажется излишним. Позже, когда я закончу проверку AST, мне нужно будет написать
match n with
| NodeX(..., _) -> ...
в каждом match
, который является пустой тратой пространства.
Какой лучший способ решить эту проблему?