2011-12-15 29 views
5

ayrıştırma? Özellikle onları nasıl ayrıştırmak için?Ocaml - Dosyalar ve ocaml dosyanın içeriğini okumak için nasıl

Örnek:

varsayalım dosya istediğim, bu okuduktan sonra

sonra (a,b,c);(b,c,d)| (a,b,c,d);(b,c,d,e)| içeren l1 = [(a,b,c);(b,c,d)] ve l2 = [(a,b,c,d);(b,c,d,e)]

ayrıştırma için herhangi bir iyi öğretici var mı içeren iki liste?

+2

soruları Repost etmeyin. Mevcut sorunuza eklemek için yeni bir şeyiniz varsa, lütfen bunun yerine düzenleyin. – BoltClock

cevap

2

Bir dilbilgisi belirtmek ve sizin için lexus ve parsmer oluşturmak ocaml varsa, bu ocamllex ve ocamlyacc eğitimlerini inceleyin. Bunu bu şekilde yapmanızı öneriyorum. Eğer gerçekten sadece dosya biçiminde belirteci bir tür varsa sadece dilbilgisi tarafından geçerli kabul edilir dizgeciklerine dosyasına bölmek lexer kullanabilirsiniz, o zaman ocamlyacc overkill olabilir.

5

Bu menhir ayrıştırıcı jeneratör (ocamlyacc halefi) için iyi kullanıldığı durumdur. Lexing için ocamllex'u kullanmak isteyebilirsiniz. Hepsi iyi belgelere sahip.

Ayrıca camlp4 veya camlp5 akışı ayrıştırma yeteneklerini kullanabilirsiniz.

lexing & parsing adresindeki wikipedia sayfalarını da okuyun.

+0

bana bazı örnek kod veya bir şeye atıfta miyim? – priyanka

+3

Belgelerin örnek kodları var. –

3

Ben Aurochs, böyle bir şey için bir PEG ayrıştırıcı kullanmak eğimli olurdu. Repoda örnek kod var.