Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ikasty/hyeongc
혀엉씨
https://github.com/ikasty/hyeongc
c esolang hyeong interpreter unicode-characters
Last synced: about 2 months ago
JSON representation
혀엉씨
- Host: GitHub
- URL: https://github.com/ikasty/hyeongc
- Owner: ikasty
- Created: 2017-01-18T03:46:13.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-02-01T17:28:56.000Z (almost 8 years ago)
- Last Synced: 2024-08-03T18:15:01.834Z (5 months ago)
- Topics: c, esolang, hyeong, interpreter, unicode-characters
- Language: C
- Size: 204 KB
- Stars: 13
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
- AwesomeInterpreter - hyeongc
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번 스택에 역순으로 채워넣는다. (즉, 맨 첫 글자가 스택의 맨 위에 위치하도록 넣는다.)