Я приложил все усилия, чтобы включить всю (и только) информацию, которая необходима. Дай мне знать, если видение большего поможет тебе.
У меня проблемы с моим регулярным выражением. Моя программа печатает в файл .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
Подводя итог, он объединяет два идентификатора, разделенных пробелом, а также удаляет любой токен после идентификатора.
Вы просто забыли поставить фигурные скобки вокруг некоторых имен. Вместо
{letter}(letter|digit)*
ты должен написать
{letter}({letter}|{digit})*
Вы также должны переместить правила для функция, целое число а также возвращается перед правилом для идентификатора, так как правила для идентификатора тоже совпадают.
Других решений пока нет …