操作Flex内的错误EOF

时间:2017-10-29 19:03:07

标签: flex-lexer lexical-analysis

我正在创建一个将使用flex编译的文件,但我无法理解为什么会收到此错误。我对此缺乏经验。 该错误表示操作中文件的第43行(即最后一行)结束。 到目前为止我所拥有的。

%{
#ifdef PRINT
#define TOKEN(t) printf("Token: " #t "/n");
#else
#define TOKEN(t) return(t);
#endif
%}

%%
"," TOKEN(COMMA")
";" TOKEN(SEMICOLON)
"->"    TOKEN(ARROW)
"(" TOKEN(BRA)
")" TOKEN(KET)
"=" TOKEN(EQUALS)
"<>"    TOKEN(LESMORE)
 "<" TOKEN(LESS)_THAN)
 ">" TOKEN(MORE_THAN)
 "<="    TOKEN(LESS_EQUAL)
 ">="    TOKEN(MORE_EQUAL)
 "*" TOKEN(MULTIPLY)
 "/"    TOKEN(DIVIDE)
 "'"    TOKEN(CHAR_SHOW)
 ENDP    TOKEN(ENDP)
 DECLARATIONS    TOKEN(DECLARATIONS)
 CHARACTER   TOKEN(CHARACTER)
 INTEGER TOKEN(INTEGER)
 REAL    TOKEN(REAL)
 ENDIF   TOKEN(ENDIF)
 ELSE    TOKEN(ELSE)
 ENDDO   TOKEN(ENDDO)
 WHILE   TOKEN(WHILE)
 DO  TOKEN(DO)
 ENDWHILE    TOKEN(ENDWHILE)
 FOR TOKEN(FOR)
 IS  TOKEN(IS)
 BY  TOKEN(BY)
 TO  TOKEN(TO)
 ENDFOR  TOKEN(ENDFOR)
 WRITE   TOKEN(WRITE)
 NEWLINE TOKEN(NEWLINE)
 READ    TOKEN(READ)
 %%

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

第一个动作是:

"," TOKEN(COMMA")

引用不匹配。

另外,

存在问题
 "<" TOKEN(LESS)_THAN)

我不清楚这一行中的所有行是否都被错误地缩进了一个空格;如果是这样,这也是一个问题。

最后,TOKEN宏(可能是从不需要的其他地方复制的)中没有什么意义,因为你可以使用--debug command-line option来生成非常准确的扫描仪痕迹,并且有一个类似的tracing facility in bison,它也会显示扫描仪的结果(包括令牌的名称,不幸的是,它不会提供。)

答案 1 :(得分:0)

你有两个错别字,你必须改为:

            Line 10 :         "," TOKEN(COMMA")       -->     "," TOKEN(COMMA)

            Line 17:          "<" TOKEN(LESS)_THAN)   -->     "<" TOKEN(LESS_THAN)