Pegjs: Praprosesor? Buat ulang kode sumber

Dibuat pada 12 Nov 2017  ·  5Komentar  ·  Sumber: pegjs/pegjs

Saya sedang membangun ekstensi ke bahasa yang ada sebagai praprosesor. Saya tidak dapat mengetahui apakah ada cara untuk mendapatkan pegjs untuk membuat ulang kode sumber. Pada dasarnya saya ingin mengurai sumbernya, saya ingin memodifikasi AST lalu membuat ulang sumbernya. Lagi pula ini mungkin?

discussion question

Komentar yang paling membantu

@YemSalat benar, PEG.js hanyalah generator parser.

  1. Buat parser menggunakan PEG.js (pastikan tindakan mengembalikan AST)
  2. Parsing bahasa Anda dengan parser yang dihasilkan untuk membangun AST
  3. Ubah AST menggunakan transform pass's
  4. Buat ulang kode sumber

Seperti yang Anda lihat, PEG.js hanya terlibat pada langkah pertama, jadi jika Anda ingin membuat ulang sumbernya, Anda harus membuat kompiler sendiri, atau jika kompiler atau generator (rantai alat) sudah ada untuk bahasa tersebut, saya sarankan Anda dapat mengembalikan AST yang kompatibel dengan toolchain atau menambahkan transformasi yang mengubah AST menjadi lebih kompatibel dengan toolchain.

Penutup, karena ini sebenarnya bukan masalah dengan PEG.js tetapi Anda dipersilakan untuk melanjutkan diskusi.

Semua 5 komentar

@mattkanwisher maaf, saya tidak begitu mengerti apa yang Anda maksud dengan "regenerasi" sumbernya.
Bisakah Anda menjelaskan sedikit? Jika maksud Anda menghasilkan kode berdasarkan AST - Anda harus menulis logika itu sendiri, baik secara langsung dalam tata bahasa atau sebagai bagian terpisah.

Ya menghasilkan kode berdasarkan AST, jadi saya harus membuat kompiler kembali ke sumber aslinya jika saya ingin melakukan praproses menggunakan ini?

Hmm, jika Anda menginginkan sumber _original_ - Anda masih memilikinya tanpa perlu membuatnya, bukan?
Tetapi jika Anda menginginkan versi modifikasinya - Anda harus menulis sendiri logika pembuatan kode.
( @Mingun @futagoza tolong koreksi saya jika saya salah)

@YemSalat benar, PEG.js hanyalah generator parser.

  1. Buat parser menggunakan PEG.js (pastikan tindakan mengembalikan AST)
  2. Parsing bahasa Anda dengan parser yang dihasilkan untuk membangun AST
  3. Ubah AST menggunakan transform pass's
  4. Buat ulang kode sumber

Seperti yang Anda lihat, PEG.js hanya terlibat pada langkah pertama, jadi jika Anda ingin membuat ulang sumbernya, Anda harus membuat kompiler sendiri, atau jika kompiler atau generator (rantai alat) sudah ada untuk bahasa tersebut, saya sarankan Anda dapat mengembalikan AST yang kompatibel dengan toolchain atau menambahkan transformasi yang mengubah AST menjadi lebih kompatibel dengan toolchain.

Penutup, karena ini sebenarnya bukan masalah dengan PEG.js tetapi Anda dipersilakan untuk melanjutkan diskusi.

Jadi saya menemukan jawabannya. Untuk siapa pun yang mendarat di pos bug ini di masa mendatang. Cukup baca kode sumber untuk "Kompiler super kecil". Setelah itu saya dapat menggunakan pegjs untuk membangun preprocessor saya dalam beberapa jam

https://github.com/thejameskyle/the-super-tiny-compiler

Apakah halaman ini membantu?
0 / 5 - 0 peringkat