логическая ошибка регулярного выражения flex / c ++

Я приложил все усилия, чтобы включить всю (и только) информацию, которая необходима. Дай мне знать, если видение большего поможет тебе.

У меня проблемы с моим регулярным выражением. Моя программа печатает в файл .txt пары лексема — токен. Все работает нормально, кроме идентификаторов и целых чисел. Например, токен для идентификатора — 262.

Пример входного файла:

function main a: integer returns integer;
b: integer is a * 2;

Образец вывода:

function - 269
maina - 262
integer - 272
returns - 274
integer - 272
; - 59
b - 262
integer - 272
is - 271
a - 262
2 - 263
; - 59

Правильный вывод будет:

function - 269
main - 262
a - 262
: - 58
integer - 272
returns - 274
integer - 272
; - 59
b - 262
: - 58
integer - 272
is - 271
a - 262
* - 261
2 - 263
; - 59

Подводя итог, он объединяет два идентификатора, разделенных пробелом, а также удаляет любой токен после идентификатора.

3

Решение

Вы просто забыли поставить фигурные скобки вокруг некоторых имен. Вместо

{letter}(letter|digit)*

ты должен написать

{letter}({letter}|{digit})*

Вы также должны переместить правила для функция, целое число а также возвращается перед правилом для идентификатора, так как правила для идентификатора тоже совпадают.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]