Какая польза от tokens.h, когда я программирую лексер? - PullRequest
0 голосов
/ 31 июля 2009

Я программирую лексер на C и где-то читал о заголовочном файле tokens.h. Это там? Если да, то для чего он нужен?

Ответы [ 2 ]

1 голос
/ 31 июля 2009

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)
0 голосов
/ 31 июля 2009

Возможно, 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;}

%%
...