首先。我是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文件的所有内容。如果您需要更多信息,请与我们联系。 欢迎任何有关我应该尝试解决此问题的提示/帮助
答案 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;