Какая польза от tokens.h, когда я программирую лексер?

StackOverflow https://stackoverflow.com/questions/1213168

Вопрос

Я программирую лексер на 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;}

%%
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top