Dilbilgisi ayrımcı bir birlik olarak tanımlamaya çalışıyorum. İki olası türü vardır: int
ve datetime
ve Add
ve Mul
'un matematiksel operatörleri. (Int günlerini eklemek gibi) int
ve datetime
üzerinde Add
eserler Mul
sadece int
üzerinde çalışır ve bir ayrıştırıcı yazdım F # özyinelemeli ayrımcılığa dayalı sendikalarda tür kısıtlaması nasıl belirtilir
type MyExpression =
|Integer of int
|Date of datetime
|Add of MyExpression * MyExpression
|Mul of MyExpression * MyExpression
gibi
datetime
üzerinde Dilbilgisi (
Benim dilbilgisi görünüyor özyinelemeli olabilir değil dilbilgisi içinde metni ayrıştırabilen fparsec), ancak Mul
'un yalnızca Integer
numaralı sürümde yineleyici olabileceği koşulunu nasıl ele alacağımı bilmiyorum.
Bu kısıtlamayı MyExpression
türünde tanımlamak için bir seçenek var mı, yoksa ayrıştırılmış girdimde bunu işlemek zorunda mıyım? Eğer tip bazlı kısıtlamaları varsa
Bu kısıtlamaların bazılarını kolları, ama hepsi değil - şu mantıklı bir ifade değil, ama çek yazın: '() Mul Tarih (DateTime.Now ekleyin (Tamsayı 1, Tamsayı 2)) –