Какая польза от tokens.h, когда я программирую лексер?
-
06-07-2019 - |
Вопрос
Я программирую лексер на C и где-то читал о заголовочном файле tokens.h
. Это там? Если да, то для чего он нужен?
Решение
tokens.h
- это файл, созданный yacc
или bison
, который содержит список токенов в вашей грамматике.
Ваш входной файл yacc
/ bison
может содержать объявления токенов, например:
%token INTEGER
%token ID
%token STRING
%token SPACE
Запуск этого файла через yacc
/ bison
приведет к созданию файла tokens.h
, который содержит определения препроцессора для этих токенов:
/* Something like this... */
#define INTEGER (1)
#define ID (2)
#define STRING (3)
Другие советы
Вероятно, tokens.h
- это файл, сгенерированный генератором синтаксического анализатора (Yacc / Bison), содержащий определения токенов, чтобы вы могли возвращать токены из лексера в синтаксический анализатор.
С Lex / Flex и Yacc / Bison это работает следующим образом:
<код> parser.y код>:
%token FOO
%token BAR
%%
start: FOO BAR;
%%
<код> lexer.l код>:
%{
#include "tokens.h"
%}
%%
foo {return FOO;}
bar {return BAR;}
%%