Skip to main content

Command Palette

Search for a command to run...

Object Oriented Interpreter 언어에 대한 구상

Updated
2 min read

개요

본문은 Object Oriented Interpreter 와 그것을 기반으로 한 ObjectiveShell 의 이론적 설계에 관해 서술하며 초기 모델링을 기술한다.

존재의 목적

상당히 많은 기존 터미널 체계 (bash, cmd 등) 는 오브젝트를 지원하지 않는다. 구조체나 복잡한 명령을 하려면 상당히 많은 기호와 직관적이지 않은 명령을 사용해야 한다. 이를 해결하고자 Python 을 기반으로 한 ObjectiveShell 을 구상해 보았다.

기반 구조

ObjectiveShell 에는 세션 단위 (ObjectiveShellSession)가 존재하며, 한 세션에는 두 종류의 메모리가 존재한다.

첫번째는 환경 변수 (environment)이다. 이는 bash 와 cmd 에서 작동하는 것과 같이 PATH 와 같은 변수를 담는 용도로 사용되며 반드시 string 타입만 사용할 수 있다. 이는 기존 명령어 환경과 친숙하게 작동하기 위함이다.

두번째는 일반 변수 (variables) 이다. 이는 실제 Python 오브젝트들을 가지고 있으며 파라미터로 넘겨줄 수 있다.

명령어

명령어는 Python 파일로 구성되어 있으며, 두가지 혹은 세가지의 메서드를 담고 있다. (예제 파일)

  1. (필수) help(session) -> str

    1. 이는 도움말 문자열을 반환한다.
  2. (필수) main(session, arg1, arg2, arg3 … argN) -> tuple(int, Any)

    1. 이는 해당 명령어를 일반적으로 실행하며 정해진 길이의 매개변수를 받을 때 사용된다.

    2. 반환하는 튜플의 첫번째 int 항목은 종료 코드다. 기본적으로 종료코드 0이 정상 종료이다.

    3. 반환하는 튜플의 두번째 Any 항목은 반환 오브젝트이다. 이는 오브젝트를 다룰 때 사용한다.

    4. 반환하는 항목이 만약 int 하나만 반환한다면, 그것이 연산의 결과값이더라도 종료 코드로 인식한다.

    5. 반환하는 항목이 만약 int 가 아닌 다른 타입이며 그것 하나만 반환된다면, 그것은 결과값으로 인식하고 종료코드를 0으로 간주한다.

  3. (선택) udef_main(session, arg1, arg2, arg3 … argN) -> tuple(int, Any)

    1. 이는 해당 명령어를 실행하며 정해지지 않은 길이의 매개변수를 받을 때 사용된다. 예를 들어, 만약 받는 매개변수가 5개 이상이고 (arg1, arg2 … arg5), 들어온 매개변수가 10개라면, 첫 4개의 매개변수는 각자의 자리에 들어가고 (arg1 … arg4) 나머지 6개는 하나의 리스트로 묶여 마지막 매개변수 자리에 들어간다 (arg5).

    2. 반환값은 main 과 동일하다.

파싱

명령어에서 변수를 불러오거나 인라인 인터프리팅이 필요한 경우 다음과 같이 처리한다.

인라인 명령 실행: $(명령 라인)
인라인 변수 호출: ${var:<변수 이름>}
인라인 환경변수 호출: ${env:<변수 이름>}