C++ LEX程序中未定义的定义

C++ LEX程序中未定义的定义,c++,ubuntu,compiler-construction,ubuntu-14.04,lex,C++,Ubuntu,Compiler Construction,Ubuntu 14.04,Lex,我试图创建一个lex扫描器,它读取头文件,然后查找词法错误并将它们写入文本输出,但在包含标记{line}和{punc}的行上,我一直遇到未定义的错误。我对莱克斯完全陌生,所以我还没能确定到底缺少了什么。以下是迄今为止我的代码中存在错误的部分: %{ #include <stdio.h> #include <ctype.h> #include "tokens.h" %} %{ option noyywrap %} ws [ \t\r]

我试图创建一个lex扫描器,它读取头文件,然后查找词法错误并将它们写入文本输出,但在包含标记{line}和{punc}的行上,我一直遇到未定义的错误。我对莱克斯完全陌生,所以我还没能确定到底缺少了什么。以下是迄今为止我的代码中存在错误的部分:

%{
#include <stdio.h>    
#include <ctype.h>      
#include "tokens.h"

%}

%{ option noyywrap 
%}

ws       [ \t\r]+

%%

[ \t\n]          ;
.                printf("Unexpected Character\n");
:                return COLON;
{ws}     { ECHO; }                       
{line}   { ECHO; Listing::nextLine();}   
"<"      { ECHO; return(RELOP); }        

begin    { ECHO; return(BEGIN_); }  

{punc}   { ECHO; return yytext[0]; }   

.        { ECHO; Listing::appendError(LEXICAL, yytext); } 

%%


int main() 
{
    yylex();
}
%{
#包括
#包括
#包括“tokens.h”
%}
%{选项noyywrap
%}
ws[\t\r]+
%%
[\t\n];
.                printf(“意外字符\n”);
:返回冒号;
{ws}{ECHO;}
{line}{ECHO;清单::nextLine();}

“您必须在初始部分定义
line
punc
,就像您对
ws
所做的那样。错误告诉您它无法展开
{line}
{punc}”
因为这两个标识符没有定义。

line
punc
在我能看到的任何地方都没有定义。你认为它们是什么意思,为什么?非常感谢!我一直在盯着我所有的文件看,没有看到那明显的错误盯着我的脸看!我将对此进行归因睡眠剥夺!再次感谢!