비선형 스토리 제작때문에 작업중이고, 어려운건 다 넘겨서 거의 막바지같은데
전역변수 관리가 좀 까다롭게 느껴짐
왜냐하면 다이얼로그 텍스트 해석기의 실행순서에 따라
초기화되지 않은 전역변수에 어떻게 접근할건가 하는 문제가 생기기 때문이었음
# definition.txt
var money = 0
var player_name = “Jack”
var has_met_monster = false
# story.txt
# definition.txt에서 정의한 전역변수에 접근
# 어디서 반드시 definition이 먼저 해석되어야 접근 가능
if has_met_monster
“I saw a monster!”
end
처음 생각했던건 디렉토리 전체를 순회하면서 변수 선언에 한해서만 별도의 심볼테이블을 만든 후
나중에 개별 스크립트를 불러올 때마다 심볼을 찾아서 링킹하는 방식이었는데
내가 예상 못했던 문제가 표현식 관리임
var int_value = 10 + 5
초기화를 이렇게 시키는 경우라면,
심볼 테이블에 이름만 등록할 수가 없는 문제가 있다. 누가 쓰기 전에 식이 평가된 후 반드시 초기화가 되어야 함
따라서 심볼 테이블을 만들기 위한 표현식 관리 코드를 추가로 만들어줘야 한다
이렇게되면 기존 파서에서 이미 상수나 문자 리터럴 등을 하나의 테이블에 모아주며 내부코드화 시키고 있는데, 그 코드들을 활용할 수가 없다
그래서 다음 대안으로 생각한건 init.txt와 같은 이름을 가진 텍스트 파일이 있는 경우에
반드시 가장 먼저 실행해서 자원들을 등록하도록 강제하는 방법을 생각해 봤다
적절할까?
실제 컴퓨터 메모리도 전역변수 초기값이 있는 영역/없는 영역 나뉘어져있으니 비슷한 방식이라고 생각함 문제될게 있으려나
어짜피 런타임에 판단하는거 아님? 그럼 그냥 변수 등록하면서 표현식 파싱하면 되잖아
맞는 말임. 근데 한번 선언한 변수는 가장 먼저 등록된 후 모든 스크립트에서 접근 가능해야 함. 이건 런타임에 판단하기 전에 먼저 등록돼야 함
마치 컴파일러 수업을듣는것같네