a che cosa serve tokens.h quando sto programmando un lexer?
-
06-07-2019 - |
Domanda
Sto programmando un lexer in C e ho letto da qualche parte sul file di intestazione tokens.h
. È qui? In tal caso, a che cosa serve?
Soluzione
tokens.h
è un file generato da yacc
o bison
che contiene un elenco di token all'interno della tua grammatica.
Il tuo file di input yacc
/ bison
può contenere dichiarazioni di token come:
%token INTEGER
%token ID
%token STRING
%token SPACE
L'esecuzione di questo file tramite yacc
/ bison
comporterà un file tokens.h
che contiene le definizioni del preprocessore per questi token:
/* Something like this... */
#define INTEGER (1)
#define ID (2)
#define STRING (3)
Altri suggerimenti
Probabilmente, tokens.h
è un file generato dal generatore di parser (Yacc / Bison) contenente definizioni di token in modo da poter restituire token dal lexer al parser.
Con Lex / Flex e Yacc / Bison, funziona così:
parser.y
:
%token FOO
%token BAR
%%
start: FOO BAR;
%%
lexer.l
:
%{
#include "tokens.h"
%}
%%
foo {return FOO;}
bar {return BAR;}
%%