yacc과 lex로 작업하고 있는데 문제가 있습니다.yacc와 lex char 배열로 계산기 만들기
나는 caluclator에서 작업하고 있습니다. 내 계산기를 사용하면이 작업을 수행 할 수 있습니다
예 : 문제가
user: a = 1+3
user: a
calc: 4
, 난 단 하나 개의 문자와 함께 할 수 있습니다. 하지만 최대 3 자까지 입력하고 싶습니다.
예 :
user: abc = 1+3
user: abc
calc: 4
또한 좀 더 뭔가를 추가 할.
내 코드는 다음과도 작동합니다 : 내 문제와 연결 내 코드의
user: abc = 1+3
user: abc
calc: 4
user: ab
calc: 4 /* THIS IS BECAUSE IT SCAN ONLY FIRST CHARACTER */
user: a
calc: 4 /* THIS IS BECAUSE IT SCAN ONLY FIRST CHARACTER */
부 :
-YACC
%{
int symbolVal(char symbol);
void updateSymbolVal(char symbol, int val);
%}
%union {double num; char id;}
%token <id> identifier
%type <id> assignment
%%
assignment : identifier EQUALS exp { updateSymbolVal($1, $3); }
term : /*something */
| identifier { $$ = symbolVal($1); }
%%
/* C CODE */
int symbolVal(char symbol) {
int bucker = computeSymbolIndex(symbol);
return symbols[bucket];
}
void updateSymbolVal(char symbol,int val) {
int bucket = computeSymbolIndex(symbol);
symbols[bucket] = val;
}
int computeSymbolIndex(char token) {
int idx = 0;
idx = token - 'a' + 26;
return idx;
}
내가 그 코드 가 말하고 싶은을 수정하십시오.
하지만이 모든 것이 최대 3 자까지만 필요합니다.
어쩌면이 배열이나 포인터를 할 수 있지만 어떻게 모르겠다.
. 더 기능적인 버전을 시도하고 프로그램이 멈췄을 때 돌아 오십시오. –
@ Micheled'Amico 답변을 많이 주셔서 감사합니다, 나는 배열을 사용해야하지만, 어떻게 알지는 못한다 :/ – Nebojsa
이것은 C와 관련이 있습니다 ? – dhein