Skip to content

ikasty/hyeongc

Repository files navigation

혀엉씨

난해한 혀엉...언어 v0.4.5의 C 구현체 혀엉씨 v0.4.5.3

모든 해석 케이스 구현 (example/parse-test 참조)

사용법

  • hyeongc [option] [--] 파일명

옵션

  • -v, --version, -h, --help

    도움말 및 버전 출력

  • -d, --debug

    실행 시 디버그 메시지를 함께 출력

  • -D, --strict-debug

    출력 값이 있을 경우에만 디버그 메시지를 출력

  • -p code_no

    명령어 번호가 code_no인 명령어를 실행하기 전에 중단하고, 디버그 모드로 전환

  • --parse-only

    실행하지 않고, 파싱 결과만을 출력

컴파일

gcc 와 make가 있는 Unix-like 시스템에서 컴파일 가능함

구현체 스펙

  • 토큰 처리 O(n)
  • 명령어 분석 최대 O(n^2) (대부분의 경우 O(n))
  • 스택 찾기 O(1) (mod 10을 이용한 기초적인 해싱)
  • 스택 개수 제한 없음 (허용 메모리 내)
  • 하트 저장소 찾기 최대 O(n) (하트 모양 별 linked list)
  • 하트 저장소 개수 제한 없음 (허용 메모리 내)
  • 유리수 분모/분자 각각 부호 있는 최소한 64비트 이상의 정수 범위
  • 디버그 모드
  • 파서 결과만 출력 가능

변경된, 또는 구체화된 언어 명세

  • 하트 구역의 ?/는 해당 토큰 전후에 하트 토큰이 없어도 정상 작동함

예시: 형...!3를 현재 스택에 넣은 뒤, ! 토큰으로 인해 이 값을 뽑는다. 선택할 하트 토큰이 없으므로 뽑은 값은 버려진다.

  • 하트 구역에 하트 토큰이 여러 개 나타나는 경우 맨 처음 하트를 제외한 나머지 하트는 버려짐

예시: 혀엉...💗!💕혀엉...💗💙💝!💕♡💜는 동치이다.

  • 공백 문자(스페이스, 탭, 캐리지, 뉴라인)는 명령어를 구분짓지 않는다.

예시: 혀엉... .혀엉....은 완전히 동일한 명령어이다.

  • ?!에서 값을 비교할 때, 현재 스택에서 가져온 값이 유리수인 경우 자신보다 작은 정수 중 가장 큰 정수를 택하여 비교한다.

예시: 현재 스택 상태가 -> (1/3) 5 7인 경우, (1/3)을 뽑아 0으로 비교한다.
예시: 현재 스택 상태가 ->인 경우, (NaN)을 뽑아 비교하며, 항상 뒷부분 구역을 선택한다.

  • 0번 스택이 비어있는 경우에는 표준 입력에서 유니코드 문자를 가져와, 0번 스택에 역순으로 채워넣는다. (즉, 맨 첫 글자가 스택의 맨 위에 위치하도록 넣는다.)