¿De qué sirven los tokens.h cuando estoy programando un lexer?
-
06-07-2019 - |
Pregunta
Estoy programando un lexer en C y leí en alguna parte sobre el archivo de encabezado tokens.h
. ¿Está ahí? Si es así, ¿para qué sirve?
Solución
tokens.h
es un archivo generado por yacc
o bison
que contiene una lista de tokens dentro de su gramática.
Su archivo de entrada yacc
/ bison
puede contener declaraciones de token como:
%token INTEGER
%token ID
%token STRING
%token SPACE
Ejecutar este archivo a través de yacc
/ bison
dará como resultado un archivo tokens.h
que contiene definiciones de preprocesador para estos tokens:
/* Something like this... */
#define INTEGER (1)
#define ID (2)
#define STRING (3)
Otros consejos
Probablemente, tokens.h
es un archivo generado por el generador de analizadores (Yacc / Bison) que contiene definiciones de tokens para que pueda devolver los tokens del lexer al analizador.
Con Lex / Flex y Yacc / Bison, funciona así:
parser.y
:
%token FOO
%token BAR
%%
start: FOO BAR;
%%
lexer.l
:
%{
#include "tokens.h"
%}
%%
foo {return FOO;}
bar {return BAR;}
%%