Lark adalah perangkat penguraian untuk Python, dibuat dengan fokus pada ergonomi, kinerja, dan modularitas.
Lark dapat mengurai semua bahasa bebas konteks. Sederhananya, ini berarti ia mampu mengurai hampir semua bahasa pemrograman yang ada, dan pada tingkat tertentu juga sebagian besar bahasa alami.
Untuk siapa ini?
Pemula : Lark sangat ramah untuk bereksperimen. Itu dapat mengurai tata bahasa apa pun yang Anda gunakan, tidak peduli seberapa rumit atau ambigunya, dan melakukannya dengan efisien. Ini juga membuat pohon parse beranotasi untuk Anda, hanya menggunakan tata bahasa dan masukan, dan memberi Anda alat yang mudah dan fleksibel untuk memproses pohon parse tersebut.
Pakar : Lark mengimplementasikan Earley (SPPF) dan LALR(1), serta beberapa lexer yang berbeda, sehingga Anda dapat menukar kekuatan dan kecepatan, sesuai dengan kebutuhan Anda. Ini juga menyediakan berbagai fitur dan utilitas canggih.
Apa yang bisa dilakukannya?
Dan masih banyak lagi fitur lainnya. Baca dulu dan cari tahu!
Yang terpenting, Lark akan menghemat waktu Anda dan mencegah Anda mengalami sakit kepala akibat parsing.
$ pip install lark --upgrade
Lark tidak memiliki ketergantungan.
Lark menyediakan penyorotan sintaksis untuk file tata bahasanya (*.lark):
Ini adalah implementasi Lark dalam bahasa lain. Mereka menerima tata bahasa Lark, dan menyediakan utilitas serupa.
Berikut adalah program kecil untuk mengurai "Halo, Dunia!" (Atau frasa serupa lainnya):
from lark import Lark
l = Lark ( '''start: WORD "," WORD "!"
%import common.WORD // imports from terminal library
%ignore " " // Disregard spaces in text
''' )
print ( l . parse ( "Hello, World!" ) )
Dan hasilnya adalah:
Tree ( start , [ Token ( WORD , 'Hello' ), Token ( WORD , 'World' )])
Perhatikan tanda baca tidak muncul di pohon yang dihasilkan. Ini secara otomatis disaring oleh Lark.
Lark pandai menangani ambiguitas. Berikut hasil penguraian kalimat “lalat buah seperti pisang”:
Baca kodenya di sini, dan lihat contoh lainnya di sini.
Lihat daftar lengkap fitur di sini
Lark cepat dan ringan (lebih rendah lebih baik)
Lihat tutorial JSON untuk detail selengkapnya tentang cara perbandingan dibuat.
Untuk tolok ukur pihak ketiga yang menyeluruh, periksa repo Tolok Ukur Parsing Python.
Perpustakaan | Algoritma | Tata bahasa | Membangun pohon? | Mendukung ambiguitas? | Bisakah menangani setiap CFG? | Pelacakan Garis/Kolom | Menghasilkan Stand-alone |
---|---|---|---|---|---|---|---|
bersenang-senang | Earley/LALR(1) | EBNF | Ya! | Ya! | Ya! | Ya! | Ya! (hanya LALR) |
LAPIS | LALR(1) | BNF | TIDAK | TIDAK | TIDAK | TIDAK | TIDAK |
Parsing Py | PASAK | Kombinator | TIDAK | TIDAK | TIDAK* | TIDAK | TIDAK |
Peterseli | PASAK | EBNF | TIDAK | TIDAK | TIDAK* | TIDAK | TIDAK |
Pelit | PASAK | EBNF | Ya | TIDAK | TIDAK* | TIDAK | TIDAK |
ANTLR | II(*) | EBNF | Ya | TIDAK | Ya? | Ya | TIDAK |
(* PEG tidak dapat menangani tata bahasa non-deterministik. Selain itu, menurut Wikipedia, masih belum terjawab apakah PEG benar-benar dapat mengurai semua CFG deterministik )
Daftar lengkap
Lark menggunakan lisensi MIT.
(Alat mandiri ada di bawah MPL2)
Lark menerima permintaan tarik. Lihat Cara mengembangkan Lark
Terima kasih banyak kepada semua orang yang berkontribusi sejauh ini:
Jika Anda menyukai Lark dan ingin melihat kami berkembang, mohon pertimbangkan untuk mensponsori kami!
Pertanyaan tentang kode paling baik ditanyakan di gitter atau di isu.
Untuk hal lain, saya dapat dihubungi melalui email di erezshin di gmail com.
--Erez