Вы пояснили в комментарии, что хотите, чтобы print
было ключевым словом, независимо от того, следует ли за ним список параметров или нет.Поэтому список параметров не должен быть частью регулярного выражения print
.Регулярное выражение для совпадения print
должно быть просто print
.
print return PRINT;
[_a-zA-Z][_a-zA-Z0-9]* return VARIABLE;
Обратите внимание, что порядок имеет значение, потому что входное «print» может совпадать с обоими регулярными выражениями, и если несколько регулярных выражений дают совпадение одинаковой длины, lex
использует тот, который находится первым вфайл.Таким образом, ключевые слова всегда должны быть определены перед правилом для идентификаторов.
Вы также захотите распознавать скобки как свои собственные токены и игнорировать пробелы (предположительно).
¹ ВНа самом деле это должно быть частью регулярного выражения в любом случае.Но если вы хотите, чтобы print
было контекстным ключевым словом, вам нужно другое решение.