Pegjs: [Prestasi. Req.] Membalikkan proses parsing

Dibuat pada 17 Mei 2018  ·  13Komentar  ·  Sumber: pegjs/pegjs

Jenis masalah

  • Laporan Bug: Tidak
  • Permintaan Fitur: Ya
  • Pertanyaan: Ya
  • Bukan masalah: Tidak

Prasyarat

  • Bisakah Anda mereproduksi masalah?: Ya
  • Apakah Anda mencari masalah repositori?: Ya
  • Apakah Anda memeriksa forum?: Forum apa?
  • Apakah Anda melakukan pencarian web (google, yahoo, dll)?: Ya!

Keterangan

Membalikkan kemajuan penguraian akan luar biasa.

Perilaku yang diharapkan:

Mengubah objek kembali ke format yang diuraikan.

Perilaku sebenarnya:

Saya hanya dapat mengurai format, tidak mengubah objek kembali ke format yang diuraikan.

discussion feature task

Komentar yang paling membantu

Hai. Saya tidak mengerti tujuan dan konteks (mengapa) permintaan Anda. Contoh konkret bisa membantu.

Parsing mengenali string sebagai bagian dari bahasa, dan secara opsional, membangun AST atau mengevaluasi (menafsirkan) ekspresi dalam bentuk: parse(text) --> result
Fungsi _parse()_ ini, secara umum, tidak dijamin sebagai fungsi bijektif. Oleh karena itu, tidak ada jaminan Anda dapat membalikkan penguraian, karena Anda dapat membuang detail selama penguraian, misalnya.

Diberikan AST Anda dapat menghasilkan ekspresi ke dalam teks yang sesuai dengan bahasa. Ini dilakukan sebagai bagian dari pembuatan kode dan Anda dapat menggunakan mesin templat untuk mengubah AST menjadi kode sumber. Tetapi tugas ini berada di luar cakupan perpustakaan penguraian.

Semua 13 komentar

Hai. Saya tidak mengerti tujuan dan konteks (mengapa) permintaan Anda. Contoh konkret bisa membantu.

Parsing mengenali string sebagai bagian dari bahasa, dan secara opsional, membangun AST atau mengevaluasi (menafsirkan) ekspresi dalam bentuk: parse(text) --> result
Fungsi _parse()_ ini, secara umum, tidak dijamin sebagai fungsi bijektif. Oleh karena itu, tidak ada jaminan Anda dapat membalikkan penguraian, karena Anda dapat membuang detail selama penguraian, misalnya.

Diberikan AST Anda dapat menghasilkan ekspresi ke dalam teks yang sesuai dengan bahasa. Ini dilakukan sebagai bagian dari pembuatan kode dan Anda dapat menggunakan mesin templat untuk mengubah AST menjadi kode sumber. Tetapi tugas ini berada di luar cakupan perpustakaan penguraian.

Meskipun secara pribadi, saya memahami perasaan menginginkan perangkat lunak untuk dapat menghasilkan apa yang dapat diuraikan, seperti yang diringkas oleh @pjmolina , ini di luar ruang lingkup perpustakaan ini (generator parser), jadi saya akan menutup ini.

Saya sarankan Anda membuat pembuat kode Anda sendiri, menggunakan yang sudah ada untuk bahasa yang Anda parsing (Anda harus memastikan AST benar).

Tiket ini sangat masuk akal. Pustaka mana lagi yang Anda harapkan untuk mengonversi AST ke kode sumber yang diberikan tata bahasa dalam sintaks PEG.js? Ya, saat ini tidak ada cara untuk melakukan itu. Sebagian besar AST dihasilkan dalam tindakan, dan tidak mungkin untuk mengembalikannya. Tetapi ketika ada sintaks untuk generasi AST yang kita bicarakan dalam masalah yang berbeda, tiba-tiba tidak hanya masuk akal, tetapi mungkin untuk diterapkan.

StringTemplate , misalnya, adalah salah satu dari banyak alat yang dapat Anda gunakan untuk tugas tersebut: gen kode dari AST.

Saya tidak berpikir StringTemplate membaca tata bahasa dalam sintaks PEG.js.

Konteks:

Untuk kembali ke teks asli AST (A bstract S yntax T ree) tidak akan cukup. Misalnya diberikan Tata Bahasa JavaScript dua pernyataan ini
biasanya memiliki AST yang sama meskipun sintaksnya sedikit berbeda,

// statement 1
var x = 5

// statement 2 - with semicolon
var x = 5;

Agar dapat kembali ke teks asli , tindakan Parser harus berupa fungsi Injeksi .

Saran:

Saya pribadi tidak melihat bagaimana fitur seperti itu dapat menjadi bagian dari perpustakaan penguraian
yang bergantung pada tindakan pengguna yang disematkan untuk membuat struktur keluaran.

Mungkin di masa depan jika pegjs akan memiliki semacam pembuatan Pohon Parse otomatis
ini akan layak.

Bangun Sendiri

Dengan asumsi bahwa di dalam tindakan tertanam pegjs, informasi posisi lengkap tersedia
Anda dapat memasukkan tindakan tersemat kustom Anda sendiri untuk membangun CST / ParseTree
dan hanya mengubahnya menjadi AST dalam fase pasca parsing.
Setelah Anda memiliki CST yang membuat ulang input asli cukup sepele ...

Evaluasi Pustaka Parsing dengan pembuatan CST / Parse Tree otomatis

Anda dapat menemukan beberapa kandidat di sini:
https://tomassetti.me/parsing-in-javascript/

Saya telah memutuskan untuk melihat ini lagi, tetapi harus pasca-v1 sebelum dapat diimplementasikan karena itu akan menjadi titik di mana API stabil dan saya dapat merilis paket yang menawarkan struktur AST umum dasar ( misalnya @pegjs/ast ?). Paket ini dapat digunakan oleh pengembang parser untuk mendapatkan AST mereka sendiri, dan jika diperlukan, dapat digunakan untuk menerjemahkannya kembali ke sumber dengan alat lain (saya pikir @pegjs/reverse )

@futagoza bagaimana dengan ini?

@Coffee2CodeNL pegjs v1 belum keluar.

Ambil parser transformasi SVG ini di PEGJS misalnya: https://github.com/nidu/svg-transform-parser
Akan luar biasa untuk dapat membalikkan proses dan mengubah AST kembali menjadi string,
sehingga transformasi SVG dapat dengan mudah dimodifikasi, tidak hanya diurai.
Salah satu alat yang serupa adalah Augeas .

Dapatkah seseorang merekomendasikan beberapa alat untuk menghasilkan kode dari AST ?

@lzane AST yang mana?

@polkovnikov-ph beberapa AST khusus yang dihasilkan oleh PEG

Apakah ada alat yang membaca tata bahasa PEG yang dapat melakukan pekerjaan pembuatan kode?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat