Я пытаюсь определить свою грамматику как дискриминационный союз. Он имеет два возможных типа: 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
или мне нужно обработать это в моем анализируемом вводе?