Ellis Horowits의 c로쓴 자료구조 책의 코드인데요
int eval()
{
precedence token;
char symbol;
int op1, op2;
int n = 0;
int top = -1;
token = getToken(&symbol, &n);
while (token != eos)
{
if (token == operand)
push(symbol - '0');
else
{
op2 = pop();
op1 = pop();
switch (token)
{
case plus:push(op1 + op2);
break;
case minus:push(op1 - op2);
break;
case times: push(op1 * op2);
break;
case divide:push(op1 / op2);
break;
case mod:push(op1 % op2);
}
}
token = getToken(&symbol, &n);
}
return pop();
}
후위표기식을 계산하는 함수인데요. 여기서 변수 symbol과 n이 무슨역할인지 궁금합니다.
getToken함수가 스택에서 피/연산자를 하나씩 떼서 전달하는거같은데 그러면 getToken(&symbol,&n)에서 심볼자리에 스택이 들어가는게 맞지않나..?싶어요 그러면 n은 아마 스택에서 떼낼 배열칸일거같고 ..
결국 symbol과 n이 무슨역할인지 모르겠어서 모르겟네요
https://croute.me/28
여기에 코드가 나오네. precedence 얘가 뭔가 했는데.. enum 이니까.. 숫자라고 보면 되구.
고마워용 ㅎㅎ
typedef enum {lparen, rparen, plus, minus, times, divide, mod, eos, operand, end} precedence; precedence stack[MAX_STACK_SIZE]; 스택은 int stack[SIZE] 이런 형식으로 전역 변수로 되어 있음.
exp 는 사용자가 입력한 표현식을 받는 배열이고, *n 은 배열 인덱스. getToken(&symbol, &n); 하면 exp(사용자가 입력한 표현식)에서 하나씩 글자를 읽어서 *symbol 에 저장. 그리고 나서 인덱스(*n)를 1 증가시킴.
하나씩이 아니라 하나. 두번째 실행시키면 *n 가 이미 증가한 상태이니까 다음 글자를 읽게 될 거임
아ㅏㅏㅏㅏㅏㅏㅏㅏ!!!!!!!!!!!!!!11 getToken에서 n을 증가시키는거고 후위배열에서 symbol을 받아오는거구나!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
getToken(&symbol, &n); 이 리턴하는 값은, typedef enum {lparen, rparen, plus, minus, times, divide, mod, eos, operand, end} 여기 있는 걸 리턴함. ()+-*/% 이런거를 숫자로 리턴함.