我正在尝试创建一个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();
}
答案 0 :(得分:1)
您必须在初始部分定义line
和punc
,就像使用ws
一样。该错误告诉您它无法展开{line}
和{punc}
,因为这两个标识符没有定义。