LEX程序中的未定义定义

时间:2015-01-24 23:06:54

标签: c++ ubuntu compiler-construction ubuntu-14.04 lex

我正在尝试创建一个lex扫描程序,它读取头文件,然后查找词法错误并将它们写入文本输出但我在包含标记{line}和{punc的行上继续遇到未定义的错误}。我对lex完全不熟悉,所以我无法确定遗漏的内容。到目前为止,这是我的代码的一部分,它有错误:

%{
#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();
}

1 个答案:

答案 0 :(得分:1)

您必须在初始部分定义linepunc,就像使用ws一样。该错误告诉您它无法展开{line}{punc},因为这两个标识符没有定义。