我的词法分析器可以识别数字 (5,555,543667)、小数 (44.65,4.1) 和句点 (.)。
我可以很好地计算数字、小数和句点,但是当我遇到一个数字和句点彼此相邻时,它会将其计为小数。
考虑一个包含以下内容的文本文件:555 2.3 55.23 44 5。
我的输出是
1 型 1:555
2 型 3:2.3
3 型 3:55.23
4 型1:44
5 型 3:5。
其中类型 3 是我的小数标识符。
我希望将第 5 个和第 6 个令牌计为一个数字,然后是一个句点。
这是我处理我的 switch 语句的方式。
switch(*b) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
digits:
t.length++;
switch(*(b + t.length)) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
goto digits;
case '.':
goto decimal;
break;
default:
break;
}
t.type = TOKEN_DIGITS;
t.string = (char *)calloc(t.length + 1, sizeof(char));
strncpy(t.string, b, t.length);
break;
decimal:
t.length++;
switch(*(b + t.length)) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
goto decimal;
break;
}
t.type = TOKEN_DECIMAL;
t.string = (char *)calloc(t.length+1,sizeof(char));
strncpy(t.string,b,t.length);
break;
尝试了多种方法,但我被正式卡住了。