Я пытаюсь определить свою грамматику как дискриминационный союз. Он имеет два возможных типа: int и datetime и математические операторы Add и Mul.
Add работает на int и datetime (как add days in int)
Mul работает только на int, а не на datetime
Грамматика может быть рекурсивной
Моя грамматика выглядит как
type MyExpression =
|Integer of int
|Date of datetime
|Add of MyExpression * MyExpression
|Mul of MyExpression * MyExpression
Я написал парсер (fparsec), который может анализировать текст в моей грамматике, но я не уверен, как обрабатывать условие, что Mul может быть рекурсивным, но только на Integer.
Есть ли возможность определить это ограничение для моего типа MyExpression или мне нужно обработать это в моем анализируемом вводе?