Parsec'i küçük bir normal ifade ayrıştırıcısı uygulayarak öğrenmeye çalışıyorum. > Yıldız - -> exprDüzenli ifadeleri ayrıştırmak için Parsec kullanma
expr = try star
<|> try litE
<|> lit
litE = do c <- noneOf "*"
rest <- expr
return (c : rest)
lit = do c <- noneOf "*"
return [c]
star = do content <- expr
char '*'
return (content ++ "*")
bazı sonsuz döngüler var burada olsa (örneğin İfade: Ne kadar Haskell bu uygulamaya çalıştık
EXP : EXP *
| LIT EXP
| LIT
: BNF, benim dilbilgisi şey gibi görünüyor ayrıştırıcı döngüsünü sonsuza kadar yapan herhangi bir belirteç tüketmeden). Ancak, bunun nasıl düzeltileceğinden emin değilim, çünkü star
'un doğası, zorunlu jetonunu en sonunda tükettiğidir.
Herhangi bir düşünce?
Vay. Bu kadar kolay, neredeyse hile gibi geliyor. – Xodarap
Eğer [Dönem] -> Terim yerine 'Sıra, Seçim :: Terim -> Terim -> Terim' yerine daha kolay olurdu, ama sanırım tam olarak eşleşmeyen bir AST ile nasıl başa çıkılacağını gösterir ayrıştırma ağacı ... – pat