난해한 혀엉...언어 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번 스택에 역순으로 채워넣는다. (즉, 맨 첫 글자가 스택의 맨 위에 위치하도록 넣는다.)