2 poin oleh GN⁺ 2024-11-03 | 1 komentar | Bagikan ke WhatsApp

Sintaks leksikal yang aneh

  • Bulan ini saya mempelajari 42 bahasa pemrograman untuk membuat penyorot sintaks baru untuk llamafile. Menyambut Halloween, saya ingin membagikan sintaks yang paling mengejutkan.
  • Bahasa yang didukung adalah Ada, Assembly, BASIC, C, C#, C++, COBOL, CSS, D, FORTH, FORTRAN, Go, Haskell, HTML, Java, JavaScript, Julia, JSON, Kotlin, ld, LISP, Lua, m4, Make, Markdown, MATLAB, Pascal, Perl, PHP, Python, R, Ruby, Rust, Scala, Shell, SQL, Swift, Tcl, TeX, TXT, TypeScript, Zig.

Cara menulis penyorot sintaks

  • Menerapkan penyorot sintaks tidaklah sulit. C++ dan GNU gperf adalah alat yang berguna.
  • gperf dapat menghasilkan tabel hash sempurna untuk memaksimalkan performa.
  • Penyorot sintaks dasar dapat diimplementasikan sebagai mesin keadaan hingga, dengan fokus pada string, komentar, dan kata kunci.

Demo

  • Penyorot sintaks baru di llamafile memiliki keunggulan kuat dibandingkan ollama.
  • Tersedia demo pembuatan kode dalam berbagai bahasa pemrograman menggunakan model Meta LLaMA 3.2 3B Instruct di Windows 10.

Contoh sintaks leksikal yang mengejutkan

  • C: Bahasa C mengklaim sederhana, tetapi memiliki elemen rumit seperti trigraph.
  • Haskell: Mengizinkan komentar bersarang.
  • Tcl: Dapat menyertakan tanda kutip dalam identifier.
  • JavaScript: Memiliki sintaks regular expression, dan menggunakan karakter UNICODE sebagai karakter ganti baris.
  • Shell: Sintaks heredoc dapat digunakan dengan berbagai cara.
  • String Interpolation: Kotlin, Scala, TypeScript mengizinkan penyisipan kode di dalam string.
  • Swift: String dapat dibungkus dengan beberapa tanda #.
  • C#: String dapat dibungkus menggunakan beberapa tanda kutip.
  • FORTH: Men-tokenisasi semuanya berdasarkan batas spasi.
  • FORTRAN dan COBOL: llamafile mendukung penyorotan sintaks untuk bahasa-bahasa ini.
  • Zig: String multi-baris dimulai dengan dua backslash.
  • Lua: String multi-baris menggunakan tanda kurung siku dan tanda sama dengan.
  • Assembly: Memiliki berbagai dialek sehingga penyorotan sintaks menjadi sulit.
  • Ada: Menggunakan tanda kutip tunggal untuk berbagai tujuan.
  • BASIC: Tidak memerlukan tanda kutip penutup di akhir string.
  • Perl: Sintaks regular expression-nya unik.
  • Ruby: Sintaksnya rumit dan sulit dipahami.

Kompleksitas bahasa yang didukung

  • FORTH adalah bahasa yang paling sederhana dan Ruby yang paling kompleks.
  • Kompleksitas dinilai berdasarkan jumlah baris kode untuk penyorotan sintaks tiap bahasa.

Ringkasan GN⁺

  • Artikel ini mengeksplorasi sintaks unik dari berbagai bahasa pemrograman dan memberikan wawasan yang dibutuhkan untuk mengimplementasikan penyorot sintaks.
  • Penyorot sintaks llamafile mendukung berbagai bahasa, dan bisa sangat berguna khususnya untuk pemeliharaan bahasa-bahasa lama.
  • Ini membantu memahami kompleksitas sintaks bahasa pemrograman, dan akan bermanfaat bagi orang yang tertarik pada pengembangan penyorot sintaks.
  • Proyek dengan fungsi serupa antara lain Pygments dan Emacs.

1 komentar

 
GN⁺ 2024-11-03
Komentar Hacker News
  • Berbagai bahasa mendukung penyisipan kode di dalam string
    • Termasuk C#, Python, JavaScript, Ruby, Shell, dan Make
  • Penjelasan tentang karakteristik unik bahasa Tcl
    • Sulit membedakan antara kode dan data
    • Komentar bisa dikenali sebagai kode
  • Penjelasan tentang fitur string kutip dolar PostgreSQL yang praktis
    • String dapat diekspresikan dengan berbagai cara
  • Penjelasan tentang fitur penyorotan sintaks Vim
    • Penyorotan sintaks diimplementasikan dengan mendeklarasikan kecocokan dan area
    • Mendukung penyorotan sintaks yang kompleks
  • Penjelasan tentang lexing yang peka konteks di bahasa C
    • Memerlukan tabel simbol
    • Untuk penyorotan sintaks, mungkin diperlukan parsing penuh dan informasi tabel simbol
  • Penjelasan tentang contoh lucu trigraph C
    • Penjelasan tentang aturan short-circuit dengan operator logika ||
  • Penjelasan tentang sudut pandang terhadap sintaks Lisp
    • Sintaks bukan bagian yang penting dari bahasa dan seharusnya sederhana serta seragam
  • Pendapat bahwa sintaks Ruby sulit dipahami
  • Unicode escape di Java dapat merusak penyorotan sintaks
    • Unicode escape dapat digunakan juga di luar string
  • Ketertarikan pada implementasi penyorotan sintaks Joe
    • Dapat menyorot Python f-string dengan tepat
  • Penjelasan mengapa penyorotan sintaks TeX sulit
    • TeX dapat mendefinisikan ulang fungsi setiap karakter
    • Penyorotan sintaks yang sepenuhnya lengkap tidak mungkin dilakukan