Как генератор лексеров идентифицирует ключевые слова грамматики? - PullRequest
1 голос
/ 03 апреля 2012

Я думаю о том, как написать генератор лексеров.Я не могу придумать простой способ определения ключевых слов языка по его грамматике. Очевидно, что все ключевые слова являются терминалами, но не все терминалы являются ключевыми словами.Например, в следующей простой грамматике: true_value -> 'true' |'ложный';цифра -> '0' .. '9';«true» и «false» являются ключевыми словами, но «0», «1» и т. д. не являются.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 03 апреля 2012

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

Например, вот часть входного файла .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]; }
...