Большинство генераторов лексеров требуют, чтобы программист записывал регулярные выражения (или что-то подобное), чтобы идентифицировать ключевые слова (и другие терминалы).Я никогда не слышал, чтобы кто-то пытался начать с формальной грамматики и самостоятельно определять ключевые слова.
Например, вот часть входного файла .l
file (lex / flex) длякалькулятор, который я написал несколько лет назад:
sqrt { return SQRT; }
lg { return LN2; }
log { return LOG; }
sin { return SIN; }
cos { return COS; }
tan { return TAN; }
pi { return PI; }
exit { return EXIT; }
prec { return PREC; }
print { return PRINT; }
\? { return PRINT; }
[ \t] { ; }
[-+*/=()^] { return yytext[0]; }
\n { lineno++; return yytext[0]; }