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.

Pemakaian

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.

Masukan Format

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 Objecttanpa 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.

Generik

Tabel dan file kerangka jay tidak menggunakan jenis parametrized. jay.yydebugDikodekan 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.

Skeleton Files

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.

Manajemen kelas

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. pjMendukung pandangan ini bahkan jika scanner secara eksplisit dibangun menggunakan JLex .

Download

 

 

Versi:

1.1.1, Juni 2006.

Penulis:

Axel T. Schreiner .