현재 다른 브랜치를 참고해서 변수부분을 구현하고 있습니다. VarDefStatement와 VariableExpression는 괜찮은데 AssignExpression에서 좀 귀찮은 문제가 나왔습니다.
1 .
apus.y에서
expression : expression assign_operator expression 으로 되어있던것은 expression : value_expression assign_operator expression 으로 수정되어야 할 것 같습니다.
(예상했었던 우선순위 문제는 없었습니다. 항상 대입 연산 규칙이 마지막에 수행됩니다.)
2 .
위 문법대로 수정한다면 AssignExpression는 ValueExpression과 Expression을 가지고 있게됩니다. Expression의 값을 얻어내, ValueExpression이 가리키는 Value에다 SetValue를 해야하는데, 문제는 Evaluate함수 특성상 결과값이 Variable이 아닌 Value라는겁니다. 게다가 그냥 Value도 아니고, Promote와 연산을 거치며 이리저리 복사된값이라 메모리 값을 수정해도 의미가 없을것입니다.
몇가지 생각을 잠깐 해봤는데
첫 번째는 ValueExpression에서 Variable을 Evaluate한 다음에도 보관하고 있던가, 아니면 즉시 계산하던가 해서 GetVariable(Context) 멤버 함수를 제공하게 하고, 이를 AssignExpression에서 사용한다. 이고
현재 다른 브랜치를 참고해서 변수부분을 구현하고 있습니다. VarDefStatement와 VariableExpression는 괜찮은데 AssignExpression에서 좀 귀찮은 문제가 나왔습니다.
1 . apus.y에서
expression : expression assign_operator expression
으로 되어있던것은expression : value_expression assign_operator expression
으로 수정되어야 할 것 같습니다.(예상했었던 우선순위 문제는 없었습니다. 항상 대입 연산 규칙이 마지막에 수행됩니다.)
2 .
위 문법대로 수정한다면 AssignExpression는 ValueExpression과 Expression을 가지고 있게됩니다. Expression의 값을 얻어내, ValueExpression이 가리키는 Value에다 SetValue를 해야하는데, 문제는 Evaluate함수 특성상 결과값이 Variable이 아닌 Value라는겁니다. 게다가 그냥 Value도 아니고, Promote와 연산을 거치며 이리저리 복사된값이라 메모리 값을 수정해도 의미가 없을것입니다.
몇가지 생각을 잠깐 해봤는데
첫 번째는 ValueExpression에서 Variable을 Evaluate한 다음에도 보관하고 있던가, 아니면 즉시 계산하던가 해서 GetVariable(Context) 멤버 함수를 제공하게 하고, 이를 AssignExpression에서 사용한다. 이고
두 번째는 그냥 만만한 Context에 보관하는 방법입니다.
어떤 방식이 괜찮을까요, 혹은 다른 방식이 있다면 공유 바랍니다