2 ポイント 投稿者 GN⁺ 2024-11-03 | 1件のコメント | WhatsAppで共有

奇妙な字句構文

  • 今月、42個のプログラミング言語を学んで、llamafile 向けの新しいシンタックスハイライターを作成した。ハロウィーンに合わせて、最も驚くべき構文を共有したい。
  • サポートする言語は 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。

シンタックスハイライターのコーディング方法

  • シンタックスハイライターの実装は難しくない。C++ と GNU gperf が便利なツールである。
  • gperf は完全ハッシュテーブルを生成し、性能を最大化できる。
  • 基本的なシンタックスハイライターは有限状態機械で実装でき、文字列、コメント、キーワードに重点を置く。

デモ

  • llamafile の新しいシンタックスハイライターは、ollama より強力な利点を持っている。
  • Windows 10 上で Meta LLaMA 3.2 3B Instruct モデルを使い、さまざまなプログラミング言語でコードを生成するデモを提供している。

驚くべき字句構文の例

  • C: C 言語は単純だと主張されるが、トライグラフのような複雑な要素がある。
  • Haskell: ネストしたコメントを許可する。
  • Tcl: 識別子に引用符を含めることができる。
  • JavaScript: 正規表現構文があり、UNICODE 文字を改行文字として使う。
  • Shell: heredoc 構文をさまざまな方法で使える。
  • String Interpolation: Kotlin、Scala、TypeScript は文字列内へのコード挿入を許可する。
  • Swift: 文字列を複数の # で囲める。
  • C#: 複数の引用符を使って文字列を囲める。
  • FORTH: すべてを空白区切りでトークン化する。
  • FORTRAN と COBOL: llamafile はこれらの言語のシンタックスハイライトをサポートする。
  • Zig: 複数行文字列を 2 つのバックスラッシュで開始する。
  • Lua: 複数行文字列に角括弧とイコールを使う。
  • Assembly: 多様な方言があり、シンタックスハイライトが難しい。
  • Ada: シングルクォートをさまざまな用途で使う。
  • BASIC: 文字列の末尾に引用符が不要である。
  • Perl: 正規表現構文が独特である。
  • Ruby: 構文が複雑で理解しにくい。

サポート言語の複雑さ

  • FORTH が最も単純で、Ruby が最も複雑な言語である。
  • 各言語のシンタックスハイライト用コードの行数で複雑さを評価している。

GN⁺ のまとめ

  • この記事は、さまざまなプログラミング言語の独特な構文を探り、シンタックスハイライターの実装に必要な洞察を提供する。
  • llamafile のシンタックスハイライターは多様な言語をサポートし、特に古い言語の保守に役立つ可能性がある。
  • プログラミング言語の構文の複雑さを理解する助けになり、シンタックスハイライター開発に関心のある人にとって有益だろう。
  • 類似機能を持つプロジェクトとしては Pygments と Emacs がある。

1件のコメント

 
GN⁺ 2024-11-03
Hacker Newsの意見
  • 多くの言語が文字列内へのコード埋め込みをサポートしている
    • C#、Python、JavaScript、Ruby、Shell、Make などが含まれる
  • Tcl 言語の独特な特性の説明
    • コードとデータを区別しにくい
    • コメントがコードとして認識されることがある
  • PostgreSQL の便利なドル引用文字列機能の説明
    • さまざまな方法で文字列を表現できる
  • Vim の構文ハイライト機能の説明
    • マッチと領域を宣言して構文ハイライトを実装する
    • 複雑な構文ハイライトをサポートする
  • C 言語の文脈依存のレキシングの説明
    • シンボルテーブルが必要になる
    • 構文ハイライトのために完全な構文解析とシンボルテーブル情報が必要になる場合がある
  • C トライグラフの面白い例の説明
    • || 論理演算子を使った短絡評価の規則の説明
  • Lisp の構文に対する見方の説明
    • 構文は言語の重要な部分ではなく、単純で均一であるべきだという考え
  • Ruby の構文は理解しにくいという意見
  • Java の Unicode エスケープが構文ハイライトを壊しうる
    • Unicode エスケープは文字列の外側でも使用できる
  • Joe の構文ハイライト実装への関心
    • Python の f-strings を適切にハイライトできる
  • TeX の構文ハイライトが難しい理由の説明
    • TeX は各文字の機能を再定義できる
    • 完全な構文ハイライトは不可能である