Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ikasty/hyeongc

혀엉씨
https://github.com/ikasty/hyeongc

c esolang hyeong interpreter unicode-characters

Last synced: about 2 months ago
JSON representation

혀엉씨

Awesome Lists containing this project

README

        

혀엉씨
===========

[난해한 혀엉...언어 v0.4.5](https://gist.github.com/xnuk/d9f883ede568d97caa158255e4b4d069/dcb12c9f727a8d3cbcbd362078e165e124caadc6)의 C 구현체 혀엉씨 v0.4.5.3

모든 [해석 케이스](https://github.com/xnuk/hyeong-testcases) 구현 (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번 스택에 역순으로 채워넣는다. (즉, 맨 첫 글자가 스택의 맨 위에 위치하도록 넣는다.)