원문 캡처 · nomlang.org
원문 캡처 · nomlang.org

Nom 언어로 작성한 컴파일러는 Nom 코드로 컴파일할 수 있고, Nom 스크립트 번역기 역시 자기 자신을 Java 코드로 변환할 수 있다. Pep/Nom 시스템에서 이런 자기 변환을 실행하는 방법과 관련 스크립트가 소개됐다.

Nom 컴파일러는 다음 명령으로 새 컴파일러 코드를 생성한다.

pep -f compile.pss compile.pss > asm.new.pp

생성된 asm.new.pp가 제대로 작동하는지 확인한 뒤 asm.pp에 덮어쓸 수 있다. Nom의 translation 폴더에 있는 스크립트들도 스스로 컴파일·변환할 수 있으며, 이를 이용하면 Nom 스크립트를 Java 코드로 변환하는 프로그램을 만들 수 있다.

pep -f translate.java.pss translate.java.pss > Machine.java
javac Machine.java

이렇게 만든 Java 번역기로 표현식 파서 스크립트를 Java 코드로 변환하고 실행할 수도 있다.

cat eg/exp.tolisp.pss | java Machine > Machine.java
javac Machine.java
echo "(a+2)*3+4" | java Machine
# will print the expression (a+2)*3+4 as Lisp code

예시에서는 Java 컴파일러의 제약 때문에 프로그램과 소스 파일을 Machine과 Machine.java로 지정해야 한다. 글은 Go 번역기로 컴파일러를 만들면 이 문제가 발생하지 않는다고 설명한다. 번역기를 시험할 때 입력을 간단히 하는 함수 모음은 helpers.pars.sh에서 확인할 수 있으며, Nom JSON 파서를 Go로 변환해 파일 입력으로 실행하는 예시는 다음과 같다.

pep.goff eg/json.check.pss somedata.json

Nom 컴파일러와 번역기의 소스는 컴파일러, 번역 스크립트에서 볼 수 있다.