2P by neo 25일전 | favorite | 댓글 1개

이상한 어휘 구문

  • 이번 달에 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: 다중 줄 문자열을 두 개의 백슬래시로 시작함.
  • Lua: 다중 줄 문자열에 대괄호와 등호를 사용함.
  • Assembly: 다양한 방언이 있어 구문 강조 표시가 어려움.
  • Ada: 단일 인용 부호를 다양한 용도로 사용함.
  • BASIC: 문자열의 끝에 인용 부호가 필요하지 않음.
  • Perl: 정규 표현식 구문이 독특함.
  • Ruby: 구문이 복잡하고 이해하기 어려움.

지원 언어의 복잡성

  • FORTH가 가장 간단하고 Ruby가 가장 복잡한 언어임.
  • 각 언어의 구문 강조 표시를 위한 코드 라인 수로 복잡성을 평가함.

GN⁺의 정리

  • 이 글은 다양한 프로그래밍 언어의 독특한 구문을 탐구하며, 구문 강조 표시기를 구현하는 데 필요한 통찰력을 제공함.
  • llamafile의 구문 강조 표시기는 다양한 언어를 지원하며, 특히 오래된 언어의 유지보수에 유용할 수 있음.
  • 프로그래밍 언어의 구문 복잡성을 이해하는 데 도움이 되며, 구문 강조 표시기 개발에 관심 있는 사람들에게 유익할 것임.
  • 비슷한 기능을 가진 프로젝트로는 Pygments와 Emacs가 있음.
Hacker News 의견
  • 여러 언어들이 문자열 내 코드 삽입을 지원함
    • C#, Python, JavaScript, Ruby, Shell, Make 등이 포함됨
  • Tcl 언어의 독특한 특성 설명
    • 코드와 데이터를 구분하기 어려움
    • 주석이 코드로 인식될 수 있음
  • PostgreSQL의 편리한 달러 인용 문자열 기능 설명
    • 다양한 방식으로 문자열을 표현할 수 있음
  • Vim의 구문 강조 기능 설명
    • 매치와 영역을 선언하여 구문 강조를 구현함
    • 복잡한 구문 강조를 지원함
  • C 언어의 문맥 민감한 렉싱 설명
    • 심볼 테이블이 필요함
    • 구문 강조를 위해 전체 구문 분석과 심볼 테이블 정보가 필요할 수 있음
  • C 트라이그래프의 재미있는 예시 설명
    • || 논리 연산자를 사용한 짧은 회로 규칙 설명
  • Lisp의 구문에 대한 관점 설명
    • 구문이 언어의 중요한 부분이 아니며 단순하고 균일해야 함
  • Ruby의 구문이 이해하기 어렵다는 의견
  • Java의 유니코드 이스케이프가 구문 강조를 깨뜨릴 수 있음
    • 유니코드 이스케이프가 문자열 외부에서도 사용 가능함
  • Joe의 구문 강조 구현에 대한 관심
    • Python f-strings의 적절한 강조 가능
  • TeX의 구문 강조가 어려운 이유 설명
    • TeX는 각 문자의 기능을 재정의할 수 있음
    • 완전한 구문 강조가 불가능함