중간 형식으로 규칙 컴파일하기

완전한 제목 위치 규칙으로 Core IR 파일을 만듭니다. 이름의 참조를 확인하고 파일을 바이트코드 컴파일러에 전달합니다.

이 실습의 Core IR 명령은 네이티브 CLI에서 제공합니다. Core IR은 이름의 참조를 정한 중간 표현입니다. 실행 전에 각 이름이 어떤 변수를 가리키는지 기록합니다.

소스 저장하기

다음 프로그램 전체를 heading-core.lspx로 저장하세요.

LISPEX
(define (제목-위치 남은-줄)
  (if (< 남은-줄 2) '다음-쪽으로 '그대로))

(제목-위치 input)

제목 아래에 2줄보다 적게 남으면 다음-쪽으로, 아니면 그대로를 반환합니다. 호출자는 input으로 남은 줄 수를 전달합니다. Core IR 생성은 규칙을 실행하지 않고 이 요구사항을 기록합니다.

Core IR 파일 만들기

SH
lispex core-ir build --source heading-core.lspx --out heading-core.lpxir

명령은 heading-core.lpxir를 만들고 JSON 빌드 보고서를 출력합니다. 종료값은 0입니다. 저장할 경로에는 기존 파일이 없어야 합니다. 같은 이름의 파일이 이미 있으면 그 파일을 바꾸지 않고 종료값 3을 반환합니다.

보고서에서 일부 필드를 발췌하면 다음과 같습니다.

JSON
{
  "authority": "integrity-only",
  "core_ir_build": "lispex.core-ir-build/v1",
  "execution": "not-run"
}

보고서에는 소스와 파일의 식별자, 언어 프로파일, 테이블별 개수도 있습니다. 컴파일러는 보고서와 별도로 lispex.core-ir/v1 파일을 저장합니다.

이름과 소스 위치 읽기

SH
lispex core-ir inspect --ir heading-core.lpxir

명령은 종료값 0과 검사 보고서를 반환합니다. 다음 발췌는 이름과 최상위 표현식 두 개를 보여 줍니다.

JSON
{
  "execution": "not-run",
  "globals": [
    {
      "id": 0,
      "initial_primitive": {
        "id": 6,
        "name": "<"
      },
      "name": "<"
    },
    {
      "id": 1,
      "initial_primitive": null,
      "name": "input"
    },
    {
      "id": 2,
      "initial_primitive": null,
      "name": "제목-위치"
    }
  ],
  "requirements": [
    "explicit-input"
  ],
  "roots": [
    {
      "column": 1,
      "index": 0,
      "line": 1,
      "normalized_core": "(define 제목-위치 (lambda (남은-줄) (if (< 남은-줄 (quote 2)) (quote 다음-쪽으로) (quote 그대로))))"
    },
    {
      "column": 1,
      "index": 1,
      "line": 4,
      "normalized_core": "(제목-위치 input)"
    }
  ]
}

제목-위치는 전역 셀 2를 가리킵니다. < 셀은 내장 프로시저 ID 6으로 시작합니다. input은 셀 1을 쓰고 explicit-input 요구사항을 추가합니다.

첫 표현식은 lambda를 포함한 정의로 바뀝니다. 둘째 표현식은 4행 1열의 (제목-위치 input)으로 남습니다. 루트는 최상위 표현식 하나를 뜻합니다. 보고서에는 루트 2개, 표현식 노드 12개, 매개변수 바인딩 1개, 함수 1개가 기록됩니다.

전체 보고서의 artifact.source_sha256과 artifact.core_ir_sha256은 각각 정확한 소스 바이트와 Core IR 파일 전체를 식별합니다. 결과가 같은 규칙이라도 소스의 공백을 바꾸면 이 식별자가 달라질 수 있습니다.

저장한 파일 검증하기

SH
lispex core-ir validate --ir heading-core.lpxir

명령의 종료값은 0입니다. 보고서에는 다음 필드가 포함됩니다.

JSON
{
  "core_ir_validation": "lispex.core-ir-validation/v1",
  "valid": true
}

검증기는 크기와 개수 한도, JSON 구조, 스키마와 프로파일과 내장 프로시저 목록의 식별자를 확인합니다. 소스 위치와 참조와 꼬리 호출 위치도 검사합니다. 함수가 사용하는 바깥 변수의 셀인 캡처도 검사합니다. 읽기 도구는 하나로 정해진 바이트 표현만 받아들입니다. 필드 순서나 공백이 바뀐 파일은 거부합니다.

파일을 컴파일러에 전달하기

bytecode build에는 heading-core.lpxir를 입력으로 전달합니다. 바이트코드 가이드에서 같은 소스에 request.lspx를 더해 결과를 실행합니다.

항목용도
heading-core.lspx소스 프로그램
heading-core.lpxir컴파일러가 읽는, 이름의 참조를 정한 프로그램
빌드와 검사와 검증 보고서사람과 자동화 도구가 읽는 JSON 정보
heading-core.lpxbc가상 머신이 읽는 컴파일된 명령

표준 스트림을 쓰려면 --source -나 --out -를 지정합니다. --out -를 쓰면 stdout에는 Core IR 바이트만 나오고 진단은 stderr로 갑니다. JSON 보고서를 덧붙이거나 인코딩을 바꾸지 않고 그 바이트를 그대로 저장하세요.

관련 형식

네이티브는 Core IR에서 Meaning Graph도 만들 수 있습니다. Core IR 참조에서 v0와 v1 명령과 형식을 설명합니다.

리스펙스 바우치는 정확한 소스로 별도 컴파일 묶음을 만듭니다. 바우치 검사는 발급자 인증, 수신자 정책, 정확한 입력, 현재 실행 결과도 함께 사용합니다. 이 묶음의 소스 규칙과 명령은 바이트코드 참조에서 확인하세요.