_yylval是一个未解析的外部符号

时间:2013-10-19 14:19:39

标签: c lex flex-lexer

首先。我是flex / lex的新手。所以这对你们来说可能是一个简单的问题,也可能很难,因为我不知道问题直接存在于哪里。

我的代码:

    /* example.lex */
%{
#include <stdio.h>
#include "global.h"
extern int yylval;   
%}

%option noyywrap

delim     [\t\n]
ws        [\t\n]+
letter    [A-Za-z]
digit     [0-9]
id        {letter}({letter}|{digit})*
nummer    [0-9]+

%%

{ws}       { /* Dont Do Anything */ }
{id}       { yylval = atoi(yytext); return ID; }
{nummer}   { yylval = atoi(yytext); return NUM; }
"+"        { return '+'; }
"-"        { return '-'; }
"*"        { return '*'; }

%%

这是我的example.lex文件的所有内容。如果您需要更多信息,请与我们联系。 欢迎任何有关我应该尝试解决此问题的提示/帮助

1 个答案:

答案 0 :(得分:1)

yylval通常由野牛(yacc)定义。如果您没有使用野牛,那么您需要自己定义yylval

在您的情况下,如果您不使用野牛,只需从您拥有的llval定义中删除“extern”即可。如果您在另一个文件中使用yylval,则必须在该文件中将其声明为“extern”。

如果您使用的是yacc,则需要在lex文件中#include“y.tab.h”。您可以通过运行'bison -d file.y'来创建y.tab.h。


如果您正在寻找一个非常简单的答案,请更改:

extern int yylval;   

int yylval;