Я пытаюсь определить свою грамматику как дискриминационный союз. Он имеет два возможных типа: int
и datetime
и математические операторы Add
и Mul
. Add
работы по int
и datetime
(как это добавить дни в межд) Mul
работает только на int
, а не на datetime
Грамматика может быть рекурсивнымF # как указать ограничение типа в рекурсивных дискриминационных объединениях
Моя грамматика выглядит
type MyExpression =
|Integer of int
|Date of datetime
|Add of MyExpression * MyExpression
|Mul of MyExpression * MyExpression
Я написал парсер (fparsec), который может анализировать текст в моей грамматике, но я не уверен, как обращаться с условием, что Mul
может быть рекурсивным, но только на Integer
.
Есть ли возможность определить это ограничение для моего типа MyExpression
или мне нужно обработать это в моем разобранном вводе?
Это обрабатывает некоторые ограничения, но не все из них - ниже не является разумным выражением, но тип проверки: 'Add (Date (DateTime.Now), Mul (Integer 1, Integer 2)) ' –