Мой лексический анализатор распознает цифры (5 555 543 667), десятичные дроби (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;
Пробовал несколько вещей, но я официально застрял.