이상한 어휘 구문
- 이번 달에 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가 있음.