카테고리 없음

안녕 프로그래밍 언어 - 18. 끝없는 오류 수정

hyuckkim 2021. 4. 4. 00:31

release 빌드로 안녕의 0.11 버전을 만들었다. 그 옛날 사람들 말로 '판올림' 이라고 하자.

 

이번 판올림에서는 몇 개의 오류 수정과 논리적 풀그림 개발을 위한 기능 추가가 있었습니다.

 

-\t 띄어쓰기 문제

 + 띄어쓰기 인식자로 ' ' 말고도 '\t' 를 인식하게 함. 이걸로 띄어쓰기가 들어갈 모든 자리에 tab을 대신 사용할 수 있음.

~ 나는 하드코딩을 지지한다.

 + 그 밖에 기호가 누락되었던 곳에 기호를 추가함

~ 하드코딩에 대한 지지를 철회할 때다.

 

-함수 인수 변수 문제

 + 함수의 인수로 변수를 사용하면 참조가 vValue -> vValue -> iValue가 되어 오류가 발생했던 것 수정.

바로 return하지 않고 혹시 vValue면 -> vValue가 가리키는 값을 return한다.

+isRValue가 변수를 오염시킬 수 있던 문제 해결을 위해 새로운 변수를 return하도록 변경.

result를 변경한다. 맨 마지막에는 return result가 있다.

 

-useFunction() 함수 제거

 + 이미 함수를 찾아놓고 또 문자열로 일일이 찾아가는 useFunction 함수 삭제.

비교 멈춰!

 + 대신 함수 포인터를 사용해 getdef 함수로 받은 함수를 바로 사용 가능하게 만듬.

이 정의된 함수 블럭에서 무슨 함수를 실행할 것인가.

https://pridiot.tistory.com/240 

 

[C] 함수 포인터, void 포인터

공부했던 자료 정리하는 용도입니다. 재배포, 수정하지 마세요.  포인터 포인터 포인터 변수 포인터 변수의 선언 * 포인터 변수의 크기 포인터 형(type) 포인터 변수와 관련된 연산자 1. & 연산자 2

pridiot.tistory.com

참고 많이 했습니다.

정말 감사합니다.

 

+ 이에 맞춰 모든 안녕 빌트인 함수가 function*를 받고 int를 반환하도록 수정.

function* fn을 받게 통일.

+ 무슨 함수를 받을 건지 지정.

읽어오기는 Function_include를 받습니다.

~ 두 번째 커밋.

 

- 함수 스택의 작동 방식을 단순 배열에서 연결 리스트로 변경.

나가

/// 이게 재귀함수가 20번정도 돌면 충분할 줄 알았는데

/// 생각해보니 반복문이랑 조건문도 이 스택에 쌓여서

/// 별로 충분하지 않았음.

 

+ 함수에 상위 함수와 이 함수의 길이를 저장.

temp를 영구히 쓰게 됐다. TODO : 이름 바꾸기

/// 예를 들어 '조건문' 안에서 '말하기'가 실행되면

/// 말하기 함수의 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다.

 

프로그램이 교과서 한 페이지보다 용량이 작다.

사실 프로그램에 기능이 없어서 그렇긴 하다.