release 빌드로 안녕의 0.11 버전을 만들었다. 그 옛날 사람들 말로 '판올림' 이라고 하자.
이번 판올림에서는 몇 개의 오류 수정과 논리적 풀그림 개발을 위한 기능 추가가 있었습니다.
-\t 띄어쓰기 문제
+ 띄어쓰기 인식자로 ' ' 말고도 '\t' 를 인식하게 함. 이걸로 띄어쓰기가 들어갈 모든 자리에 tab을 대신 사용할 수 있음.
+ 그 밖에 기호가 누락되었던 곳에 기호를 추가함
-함수 인수 변수 문제
+ 함수의 인수로 변수를 사용하면 참조가 vValue -> vValue -> iValue가 되어 오류가 발생했던 것 수정.
+isRValue가 변수를 오염시킬 수 있던 문제 해결을 위해 새로운 변수를 return하도록 변경.
-useFunction() 함수 제거
+ 이미 함수를 찾아놓고 또 문자열로 일일이 찾아가는 useFunction 함수 삭제.
+ 대신 함수 포인터를 사용해 getdef 함수로 받은 함수를 바로 사용 가능하게 만듬.
https://pridiot.tistory.com/240
[C] 함수 포인터, void 포인터
공부했던 자료 정리하는 용도입니다. 재배포, 수정하지 마세요. 포인터 포인터 포인터 변수 포인터 변수의 선언 * 포인터 변수의 크기 포인터 형(type) 포인터 변수와 관련된 연산자 1. & 연산자 2
pridiot.tistory.com
참고 많이 했습니다.
정말 감사합니다.
+ 이에 맞춰 모든 안녕 빌트인 함수가 function*를 받고 int를 반환하도록 수정.
+ 무슨 함수를 받을 건지 지정.
~ 두 번째 커밋.
- 함수 스택의 작동 방식을 단순 배열에서 연결 리스트로 변경.
/// 이게 재귀함수가 20번정도 돌면 충분할 줄 알았는데
/// 생각해보니 반복문이랑 조건문도 이 스택에 쌓여서
/// 별로 충분하지 않았음.
+ 함수에 상위 함수와 이 함수의 길이를 저장.
/// 예를 들어 '조건문' 안에서 '말하기'가 실행되면
/// 말하기 함수의 returnTo는 '조건문'이겠지.
/// 그러면 말하기 함수가 끝나면 자연스럽게 현재 함수를 returnTo로 바꾸고 이 함수는 없애면 되는거야.
+ 배열을 사용하던 부분 전부 변경.
+ 이 과정에서 생긴 중복 해제 문제 / 해제 파편화 문제 해결
/// funNow를 해제하는 위치가 정확히 정해지고 났으니
/// 원래 있던 해제 함수는 필요가 없다.
/// 함수별로 각자 할당했던 부분만 알아서 지우게 두자.
~ 세 번째 커밋.
- 강제 형변환 연산자 { } 추가.
"abc" + 0을 5로 정하기
이 코드는 abc0이라는 변수에 5라는 상수를 대입한다.
0대신 i같은 변수를 써서 넣으면 성능은 개판이지만 유사 배열같은 느낌도 낼 수 있는데...
"abc" + 0을 말하기
생각해 보니까 이거는 abc0인 5를 출력하는게 아니라 그냥 abc0을 출력한다.
그래서 {} 연산자를 추가했다.
위쪽은 일반적인 괄호와 같지만 마지막 아래부분은 다르다.
{} 연산자 안의 문자열은 그 문자열을 가진 변수로 변한다.
{"abc" + 0}을 말하기
이거는 그래서 제대로 변수 abc0의 값인 5를 말할 수 있다.
- isOperator 함수 추가.
연산자가 너무 많아지니까 코드가 좌우로 너무 길어진다. 복잡한 기능도 아니니 새로운 함수로 대체하자.
- 논리 오류 수정
이러고 Release 모드로 0.11 판을 배포했다.
exe 파일 크기가 34kb다. 이 c언어 파일 크기보다 작다. 압축하니까 15kb다.
프로그램이 교과서 한 페이지보다 용량이 작다.
사실 프로그램에 기능이 없어서 그렇긴 하다.