Anda harus menulis penerjemah untuk bahasa keren bernama Chicken !
Anda harus membaca program Chicken dari file, input standar, argumen program atau fungsi, atau apa pun yang paling nyaman untuk bahasa Anda, serta input ke program.
Anda harus mencetak atau mengembalikan hasil interpretasi program sesuai dengan spesifikasi bahasa Chicken.
Keterangan lebih lanjut tentang bahasa ini .
Ikhtisar Program Ayam
Chicken beroperasi pada tumpukan tunggal, yang menyusun seluruh model memori. Saat instruksi dijalankan, program akan mendorong dan mengeluarkan nilai dari stack, tetapi ada juga instruksi yang memungkinkan program untuk memodifikasi bagian lain dari stack sesuai keinginan.
Ada tiga segmen dalam tumpukan:
- Register, pada indeks 0 dan 1. Indeks 0 adalah referensi ke stack itu sendiri, dan indeks 1 adalah referensi ke input pengguna. Paling banyak digunakan untuk instruksi 6 (lihat di bawah).
- Kode yang dimuat: untuk setiap baris kode ada sel di segmen ini yang berisi jumlah "ayam" di baris. Ini diisi dengan 0 (opcode untuk mengakhiri program) di akhir.
- Tumpukan program aktual, di mana nilai didorong / muncul saat program berjalan. Perhatikan bahwa segmen tidak terisolasi, yang berarti dimungkinkan untuk membuat kode modifikasi sendiri atau mengeksekusi kode dari segmen ruang stack ini.
The Chicken ISA
Kumpulan instruksi Chicken didasarkan pada berapa kali kata "chicken" muncul di setiap baris program. Baris kosong mengakhiri program dan mencetak nilai teratas dalam tumpukan.
Kumpulan instruksi Ayam, dengan jumlah "ayam" per baris:
- Dorong string literal "ayam" ke tumpukan
- Tambahkan dua nilai tumpukan teratas sebagai angka alami dan dorong hasilnya.
- Kurangi dua nilai teratas sebagai bilangan asli dan dorong hasilnya.
- Gandakan dua nilai teratas sebagai bilangan asli dan dorong hasilnya.
- Bandingkan dua nilai teratas untuk kesetaraan, tekan 1 jika sama dan 0 sebaliknya.
- Lihatlah instruksi selanjutnya untuk menentukan sumber mana yang akan memuat: 0 beban dari tumpukan, 1 beban dari input pengguna. Atas tumpukan poin ke alamat / indeks untuk memuat dari sumber yang diberikan; muat nilai itu dan dorong ke tumpukan. Karena ini adalah instruksi lebar ganda, penunjuk instruksi melewatkan instruksi yang digunakan untuk menentukan sumber.
- Atas tumpukan poin ke alamat / indeks untuk menyimpan. Nilai di bawah ini yang akan muncul dan disimpan dalam tumpukan pada indeks yang diberikan.
- Top of stack adalah offset relatif untuk melompat ke. Jika nilai di bawah ini benar, maka program melompat dengan offset.
- Menafsirkan bagian atas tumpukan sebagai ascii dan mendorong karakter yang sesuai.
- (10 + N) Mendorong angka literal n-10 ke tumpukan.
Contoh
Asumsikan programnya adalah:
chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken
(an empty line)
(Program kucing. Perhatikan bahwa garis kosong diperlukan karena garis sebelumnya memiliki 6 "ayam".)
Masukan diberikan ke program Chicken
Chicken
Keluaran
Chicken
Implementasi referensi Chicken.js .
Deteksi kesalahan
Penerjemah harus meninggalkan kesalahan dan mengakhiri ketika kata apa pun yang bukan "ayam" ada di sumbernya.
Semoga berhasil!