0

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

4

1 回答 1

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;   
于 2013-10-19T15:07:32.557 回答