Paket jay
Ini adalah homepage jay , LALR a (1) generator parser: Berkeley yacc © Ditargetkan Ulang ke C # dan Java.
Lihat:
Keterangan
kelas Ringkasan | |
---|---|
tiruan | kelas palsu, memicu javadoc . |
Paket jay Deskripsi
Ini adalah homepage jay , LALR a (1) generator parser: Berkeley yacc © Ditargetkan Ulang ke C # dan Java.
jay membaca spesifikasi tata bahasa dari file dan menghasilkan LALR (1) parser untuk itu. Sebuah parser terdiri dari satu set parsing meja dan rutin driver dari kerangka yang dibaca dari masukan standar.Kerangka cocok ada untuk Java dan C #. Tabel dan sopir ditulis ke output standar.
jay [-ctv] [-b berkas-prefix ] tata kerangka | < kerangka
java jar jay.jar [-ctv] [-b berkas-prefix ] tata kerangka | < kerangka
Berikut adalah opsi yang tersedia:
-b berkas-prefix mengubah awalan ditambahkan di nama file output sekunder untuk string dilambangkan dengan file_prefix . Awalan standar adalah karakter y .
-c mengatur untuk C preprocessor #line arahan untuk dimasukkan dalam output. Ini hanya berguna untuk C #.
t mengatur untuk debugging informasi untuk dimasukkan dalam output. Informasi yang sebenarnya dikendalikan oleh file kerangka ; sebagai didistribusikan itu tergantung pada paket runtime tambahan. Untuk C # ini merupakan bagian dari sumber download, untuk Java lihat jay.yydebug
.
v menyebabkan deskripsi terbaca-manusia dari parser dihasilkan akan ditulis ke file file_prefix .output .
Jika salah satu variabel lingkungan TMPDIR , TMP , atau TEMP diatur, string dari variabel lingkungan akan digunakan sebagai nama direktori dimana file-file sementara yang dibuat.
Format masukan dan LALR (1) algoritma belum berubah dari yacc . Satu harus berkonsultasi dengan literatur yang luas di yacc untuk rincian tentang menulis dan debugging tata bahasa, pemulihan kesalahan, strategi untuk tindakan, dll
Satu-satunya perbedaan adalah tumpukan nilai, embedding parser dihasilkan di kelas, dan interface ke pemindai . Semua ini dapat diubah dengan memodifikasi file kerangka . Sisa dari bagian ini didasarkan pada file kerangka didistribusikan dengan jay .
The % serikat direktif telah dihapus. Jay menggunakan Object
(atau System.Object di C #) untuk nilai stack. Akibatnya, nama dalam notasi tag < nama > mengacu pada kelas atau interface.
Ini memiliki implikasi untuk gips yang jay menghasilkan: Baik C # atau tugas izin Java untuk variabel dicor. Oleh karena itu, notasi $$ mengacu pada Object
tanpa pemain karena $$ biasanya ditugaskan untuk. Jika $$ digunakan untuk keperluan lain, biasanya akan harus menggunakan jenis eksplisit $ < nama > $ yang berubah menjadi gips untuk nama .
Demikian pula, notasi $ n jarang ditugaskan untuk. Oleh karena itu, jay akan menghasilkan gips kecuali notasi $ <> n digunakan untuk mencegah casting.
jay tidak memancarkan gips untuk Object
. Gips ini biasanya tidak perlu dan strategi ini menghindari pesan banyak peringatan tetapi bisa menyebabkan kejutan dalam situasi overloading.
jay tidak memiliki gagasan warisan. Hal ini dapat menyebabkan pesan peringatan yang tidak beralasan mengeluh tentang tugas dipertanyakan. Ia merasa bahwa pesan-pesan ini umumnya berguna bahkan jika beberapa dari mereka yang keliru.
Tabel dan file kerangka jay tidak menggunakan jenis parametrized. jay.yydebug
Dikodekan tanpa jenis parametrized; Namun, sumber-sumber berisi kode dengan obat generik di garis yang pada titik ini adalah komentar.
Notasi < tag > mungkin berisi tanda kurung sudut bersarang dan di dalamnya karakter [] kosong ? , Selain alphanumerics biasa dan . $ _ . Namun, referensi ke nilai tumpukan $ n dilemparkan menggunakan berlaku tag dan cast ke tipe parametrized akan menggambar dicentang peringatan di Jawa.
Kelas parser dapat dijelaskan dengan @SuppressWarnings ( "dicentang") ; Namun, sementara ini mungkin menjadi cara hidup bagi Java 5 itu mungkin tidak bijaksana.
Biner atau sumber download mencakup dua file kerangka untuk Java dan satu untuk C #. Sebuah file kerangka mengontrol format tabel yang dihasilkan dan itu termasuk algoritma parser aktual yang menafsirkan tabel. Algoritma adalah sama di semua file didistribusikan tapi skeleton.tables menginisialisasi berbagai tabel dengan membaca file sumber daya pada waktu eksekusi; ini menghindari batas yang sistem Jawa membebankan pada ukuran segmen kode untuk kelas.
Untuk membuat file sumber daya, menghasilkan parser menggunakan skeleton.tables . Dari sumber parser ekstrak persis baris yang dimulai dengan // yy dan menghapus persis awalan itu. File yang dihasilkan harus berada di direktori yang sama dengan file kelas parser dan harus menggunakan nama kelas dari parser dan akhiran .tables .
Seharusnya tidak perlu mengubah file kerangka, tetapi hanya dalam kasus mereka secara luas berkomentar. File-file tersebut line-oriented. Sebuah karakter di kolom pertama menentukan apa yang terjadi pada garis: # . Menandai komentar dan garis diabaikan . Menandai garis yang disalin tanpa periode terkemuka.
t menandai garis yang relevan untuk melacak. Biasanya itu disalin dengan terkemuka // t ; jika opsi -t diatur garis disalin tanpa awalan t .
Akhirnya, garis dengan kosong terkemuka berisi perintah yang menghasilkan output dari beberapa informasi meja dan yang dapat menggunakan sisa baris sebagai parameter.
tindakan | memancarkan kode dari tindakan sebagai tubuh seorang saklar . |
epilog | memancarkan teks berikut kedua %% . |
lokal | memancarkan teks dalam % {%} berikut pertama %% . |
prolog | memancarkan teks dalam % {%} sebelum pertama %% . |
token awalan | memancarkan setiap nilai token sebagai identifier diinisialisasi dengan sisa garis sebagai awalan. |
versi komentar | memancarkan // komentar dengan sisa baris. |
yyCheck prefix yyDefRed prefix yyDgoto prefix yyGindex prefix yyLen prefix yyLhs prefix yyRindex prefix yySindex prefix yyTable prefix |
memancarkan tubuh meja yang relevan dengan sisa garis sebagai awalan untuk setiap baris output. |
yyFinal awalan | memancarkan nilai sebagai initializer dengan sisa garis sebagai awalan. |
yyNames awalan | memancarkan meja sebagai daftar kata-kata dengan sisa garis sebagai awalan untuk setiap baris output. |
yyNames-string | memancarkan meja sebagai daftar initializers tali. |
yyRule awalan | memancarkan meja sebagai daftar baris dengan sisa garis sebagai awalan untuk setiap baris output. |
yyRule-string | memancarkan meja sebagai daftar initializers tali. |
Setiap tabel diawali dengan komentar dengan informasi dimensi.
Desain file kerangka harus mempertimbangkan dua masalah: bagaimana menanamkan parser di kelas dan bagaimana antarmuka ke pemindai.
File kerangka didistribusikan berharap pengguna untuk menyediakan Prolog dalam % {%} mengandung header kelas dan untuk memasok epilog mengikuti kedua %% yang menutup ini kelas. Jay tidak tahu nama kelas parser.
Antarmuka untuk pemindai yyInput dihasilkan sebagai anggota masing-masing kelas parser; ini mungkin atau mungkin tidak menjadi pilihan yang baik. Ada tiga metode: muka tidak memiliki argumen dan harus mengembalikan nilai boolean yang menunjukkan bahwa scanner telah berhasil diekstrak simbol input lain; tanda tidak memiliki argumen dan harus kembali simbol masukan saat ini sebagai nilai integer yang mengharapkan parser; nilai tidak memiliki argumen dan dapat mengembalikan nilai objek untuk ditempatkan di negara / nilai stack untuk simbol input. Tracing mengharapkan tanda dan nilai menjadi fungsi konstan antara setiap panggilan untuk maju .
Nilai Token eksplisit dihasilkan sebagai konstanta di kelas parser. Karakter tunggal mewakili diri mereka sendiri; Namun, bagi mereka jay percaya ASCII ketimbang Unicode karakter set. Mungkin lebih baik untuk mendefinisikan konstanta dalam antarmuka scanner namun diharapkan bahwa pemindai diimplementasikan sebagai kelas dalam parser. pj
Mendukung pandangan ini bahkan jika scanner secara eksplisit dibangun menggunakan JLex .
- arsip dengan eksekusi dan kerangka untuk MacOS X, 52 kb
- arsip dengan file kelas dan kerangka untuk setiap VM Java, 520 kb , berkat Alliet dan Megacz 'nestedvm
- file sumber, 224 kb
Versi:
1.1.1, Juni 2006.
Penulis: