Ini adalah bagian dari serangkaian pertanyaan yang berfokus pada proyek saudara ke Proyek Abstraksi, yang bertujuan untuk abstrak konsep yang digunakan dalam desain bahasa dalam bentuk kerangka kerja. Proyek saudara disebut OILexer, yang bertujuan untuk membangun parser dari file tata bahasa, tanpa menggunakan injeksi kode pada pertandingan.
Beberapa halaman lain yang terkait dengan pertanyaan ini, terkait dengan pengetikan struktural, dapat dilihat di sini , dan kemudahan penggunaannya, ditemukan di sini . Meta-topik yang terkait dengan penyelidikan tentang kerangka kerja dan tempat yang tepat untuk memposting dapat ditemukan di sini .
Saya sampai pada titik di mana saya akan mulai mengekstraksi pohon parse dari tata bahasa yang diberikan, diikuti oleh parser Keturunan Rekursif yang menggunakan DFA untuk membedakan jalur maju (mirip dengan LL ANTLR 4 (*)), jadi saya kupikir aku akan membukanya untuk mendapatkan wawasan.
Dalam kompiler parser, fitur apa saja yang ideal?
Sejauh ini di sini adalah gambaran singkat tentang apa yang diterapkan:
- Templat
- Lihat ke depan prediksi, mengetahui apa yang valid pada titik tertentu.
- Peraturan 'Deliteralization' mengambil literal dalam aturan dan memutuskan dari mana token mereka berasal.
- Automata Nondeterministic
- Deterministic Automata
- Mesin status leksikal sederhana untuk pengenalan token
- Metode otomatisasi token:
- Pindai - berguna untuk komentar: Komentar: = "/ *" Pindai ("* /");
- Kurangi - Berguna untuk Pengidentifikasi: Pengidentifikasi: = Kurangi (IdentifierBody, Kata Kunci);
- Pastikan pengidentifikasi tidak menerima kata kunci.
- Encode - Mengkode otomatisasi sebagai hitungan X seri transisi basis N.
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
- Membuat pelarian unicode dalam heksadesimal, dengan hex 4-transisi. Perbedaan antara ini dan: [0-9A-Fa-f] {4} adalah otomatisasi yang dihasilkan dengan Encode membatasi set nilai heksadesimal yang diizinkan ke ruang lingkup IdentifierCharNoEscape. Jadi, jika Anda memberikannya \ u005c, versi enkode tidak akan menerima nilai. Hal-hal seperti ini memiliki peringatan serius: Gunakan hemat. Otomatisasi yang dihasilkan bisa sangat kompleks.
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
Apa yang tidak diimplementasikan adalah generasi CST, saya perlu menyesuaikan otomatisasi Deterministic untuk membawa konteks yang tepat untuk membuatnya bekerja.
Bagi siapa pun yang tertarik, saya telah mengunggah sebuah cetakan cantik dari bentuk asli proyek T * y♯ . Setiap file harus ditautkan ke setiap file lainnya, saya mulai menautkan dalam aturan individu untuk mengikuti mereka, tetapi itu akan memakan waktu terlalu lama (akan lebih mudah untuk diotomatisasi!)
Jika lebih banyak konteks diperlukan, silakan posting sesuai dengan itu.
Sunting 5-14-2013 : Saya telah menulis kode untuk membuat grafik GraphViz untuk mesin negara dalam bahasa yang diberikan. Berikut ini adalah grafik GraphViz dari AssemblyPart . Anggota yang ditautkan dalam uraian bahasa harus memiliki ruleename.txt di folder relatifnya dengan digraf untuk aturan itu. Beberapa uraian bahasa telah berubah sejak saya memposting contoh, ini karena menyederhanakan hal-hal tentang tata bahasa. Berikut ini adalah gambar graphviz yang menarik .