Rumah >hujung hadapan web >tutorial css >Mari buat bahasa pengaturcaraan kecil

Mari buat bahasa pengaturcaraan kecil

William Shakespeare
William Shakespeareasal
2025-03-13 11:18:10760semak imbas

Mari buat bahasa pengaturcaraan kecil

Anda mungkin sudah biasa dengan satu atau lebih bahasa pengaturcaraan. Tetapi adakah anda pernah berfikir tentang cara membuat bahasa pengaturcaraan anda sendiri? Maksud saya:

Bahasa pengaturcaraan adalah satu set peraturan yang menukar rentetan ke dalam pelbagai output kod mesin.

Singkatnya, bahasa pengaturcaraan hanyalah satu set peraturan yang telah ditetapkan. Untuk menjadikannya berguna, anda memerlukan sesuatu yang dapat memahami peraturan ini, seperti penyusun , jurubahasa , dll. Oleh itu, kita hanya boleh menentukan beberapa peraturan, dan kemudian, untuk menjadikannya berfungsi, kita boleh menulis program yang dapat memahami peraturan ini menggunakan mana -mana bahasa pengaturcaraan yang ada, yang akan menjadi jurubahasa kita.

Pengkompil

Pengkompil menukarkan kod ke dalam kod mesin yang boleh dilaksanakan oleh pemproses (seperti pengkompil C).

Jurubahasa

Jurubahasa meneruskan garis program mengikut baris dan melaksanakan setiap arahan.

Mahu mencubanya? Mari buat bahasa pengaturcaraan super mudah yang mengeluarkan output magenta dalam konsol. Kami memanggilnya Magenta .

Sediakan bahasa pengaturcaraan kami

Saya akan menggunakan node.js, tetapi anda boleh belajar dalam bahasa apa pun dan konsepnya tetap sama. Biarkan saya terlebih dahulu membuat fail index.js dan tetapkannya.

 kelas magenta {
  pembina (kod) {
    this.codes = codes;
  }
  run () {
    console.log (this.codes);
  }
}

// Pada masa ini, kami menyimpan kod dalam pemboleh ubah rentetan yang dipanggil `Codes` // kemudian, kami akan membaca kod dari fail const codes =` Print "Hello World"
Cetak "Hello Again" `;
const magenta = magenta baru (kod);
magenta.run ();

Apa yang kita lakukan di sini adalah mengisytiharkan kelas yang dipanggil Magenta. Kelas ini mentakrifkan dan memulakan objek yang bertanggungjawab untuk merakam teks ke konsol menggunakan mana -mana teks yang kami sediakan melalui pembolehubah kod. Dan, pada masa ini, kami telah menentukan pembolehubah kod secara langsung menggunakan beberapa mesej "hello" dalam fail.

Ok, sekarang kita perlu membuat penganalisis leksikal yang dipanggil.

Apakah penganalisis leksikal?

Ok, mari kita bercakap mengenai bahasa Inggeris terlebih dahulu. Sila lihat frasa berikut:

Adakah anda ok?

Di sini, "Hello" adalah ucapan, "adalah" nada tambahan, dan "anda" adalah kata ganti peribadi. Kami mempunyai tanda tanya ("?") Pada akhirnya. Kita boleh membahagikan sebarang ayat atau frasa ke dalam banyak komponen tatabahasa seperti ini. Satu lagi cara kita membezakan bahagian -bahagian ini adalah untuk membahagikannya menjadi tanda kecil. Program yang membahagikan teks ke dalam tag adalah penganalisis leksikal kami.

Oleh kerana bahasa kita sangat kecil, ia hanya mempunyai dua jenis tag, masing -masing dengan nilai:

  1. Kata kunci
  2. Rentetan

Kita boleh menggunakan ungkapan biasa untuk mengekstrak tag dari rentetan kod, tetapi prestasi akan sangat perlahan. Pendekatan yang lebih baik ialah gelung melalui setiap watak rentetan kod dan dapatkan tag. Oleh itu, mari kita buat kaedah tokenize dalam kelas magenta - ini akan menjadi penganalisis leksikal kami.

Kod lengkap `` javascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { const length = this.codes.length; // pos 用于跟踪当前位置/索引let pos = 0; let tokens = []; const BUILT_IN_KEYWORDS = ["print"]; // 变量/关键字允许的字符const varChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"; while (pos <code>); } } return tokens; } parse(tokens) { const len = tokens.length; let pos = 0; while (pos .value); );

Const Codes = print "hello world" print "hello again" ;

### Tentukan peraturan dan sintaks Kami ingin melihat jika pesanan kod kami sepadan dengan beberapa peraturan atau sintaks. Tetapi pertama -tama kita perlu menentukan peraturan dan sintaks ini. Oleh kerana bahasa kami sangat kecil, ia hanya mempunyai sintaks mudah, iaitu kata kunci cetak yang diikuti oleh rentetan.

Kata kunci: cetak rentetan

<code>因此,让我们创建一个解析方法,该方法循环遍历我们的标记,并查看我们是否形成了有效的语法。如果是这样,它将采取必要的措施。 ```javascript class Magenta { constructor(codes) { this.codes = codes; } tokenize() { /* tokenizer 的先前代码*/ } parse(tokens) { const len = tokens.length; let pos = 0; while (pos </code>

Lihat! Kami sudah mempunyai bahasa yang bekerja!

Ok, tetapi meletakkan kod dalam pemboleh ubah rentetan tidak begitu menyeronokkan. Oleh itu, mari letakkan kod magenta kami dalam fail yang dipanggil code.m. Dengan cara ini kita boleh memisahkan kod magenta dari logik pengkompil. Kami menggunakan .m sebagai sambungan fail untuk menunjukkan bahawa fail mengandungi kod dalam bahasa kami.

Mari baca kod dari fail ini:

 // modul sistem fail import const fs = memerlukan ('fs');
// mengimport modul laluan untuk memudahkan sambungan jalan const Path = memerlukan ('jalan');
kelas magenta {
  pembina (kod) {
    this.codes = codes;
  }
  tokenize () {
    /* kod sebelumnya untuk tokenizer*/
  }
  parse (token) {
    /* kaedah kod parse sebelumnya*/
  }
  run () {
    /* kaedah larian kod sebelumnya*/
  }
}

// Baca fail code.m // beberapa editor teks Gunakan \ r \ n sebagai garis newline dan bukannya \ n, jadi kami memadam \ r
kod const = fs
  .ReadFileSync (path.join (__ dirname, 'code.m'), 'utf8')
  .toString ()
  .replace (/\ r/g, "");
const magenta = magenta baru (kod);
magenta.run ();

Mula membuat bahasa pengaturcaraan!

Dengan cara ini, kami telah berjaya mencipta bahasa pengaturcaraan mini dari awal. Lihat, bahasa pengaturcaraan boleh semudah menyelesaikan perkara tertentu. Sudah tentu, tidak mungkin bahasa -bahasa seperti magenta di sini boleh menjadi sebahagian daripada rangka kerja yang popular, tetapi sekarang anda mempunyai idea tentang apa yang diperlukan untuk membuat bahasa pengaturcaraan.

Langit adalah had. Jika anda ingin menggali lebih mendalam, cuba ikuti video yang saya buat, yang memperkenalkan contoh yang lebih maju. Dalam video ini, saya juga menunjukkan cara menambah pembolehubah kepada bahasa anda.

Atas ialah kandungan terperinci Mari buat bahasa pengaturcaraan kecil. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn