【发布时间】:2009-07-31 15:24:27
【问题描述】:
我正在用 C 语言编写一个词法分析器,我在某处读到了有关头文件 tokens.h 的信息。它在那里吗?如果有,它的用途是什么?
【问题讨论】:
标签: c bison flex-lexer lexical-analysis
我正在用 C 语言编写一个词法分析器,我在某处读到了有关头文件 tokens.h 的信息。它在那里吗?如果有,它的用途是什么?
【问题讨论】:
标签: c bison flex-lexer lexical-analysis
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;}
%%
【讨论】: