2012-08-29 4 views
8

Parsec ile oynuyorum ve belirsiz bir dilbilgisi olduğunu farkettim. Açıkçası bu benim üzerimde bir yanlışlık var, ama ben sıradan olduğumu bilmeme izin veren yacc tarzı ayrıştırıcı jeneratörler için kullanıyorum. Parsec, parsers verdiğiniz sırayla sadece karakterleri yiyor (evet, ben try hakkında biliyorum).Parsec raporunu "kaydırmayı azalt" çatışması yapmak için herhangi bir yol var mı?

Dilbilgisi sol faktörlü değilken parsec'in bana söylenmesinin bir yolu var mı? Benim için çalışan programlar harika.

Teşekkürler!

(Nöbet-azaltması ayrıştırıcı teknolojisinin farklı bir tür ile ilgisi var biliyorum. Ben sadece belirsiz dilbilgisi tanımlamak için demek.)

cevap

8

Ben Parsec uzman değilim, bu yüzden düzeltilebilir muhtemel değilim ama bunun mümkün olduğunu düşünmüyorum, çünkü Parsec dilbilgisi hakkında hiçbir şey bilmiyor. Başka bir deyişle, dilbilginiz belirsiz olsa da, Parsec ayrıştırıcınız değildir ve bir programın, eşdeğer giriş için farklı bir çıktı üreten başka parsec kombinatoratörleri düzenlemesinin de bir yolu olmadığı bir yöntem yoktur. Belirtilmemiş bir dilbilgisinin geçerli gösterimi.

Dilbilginiz olduğundan, happy ve alex kullanmayı tercih edebilirsiniz, bu da size daha fazla lexx/yacc benzeri bir deneyim sunar.

İlginç bir proje BNFC'u bir dilbilgisini temsil etmek üzere bir AST parsec kombinatoratörünü üretmek için uyarlamak olabilir, ancak bunun önemsiz bir görev olacağından şüpheleniyorum.