动作 Flex 中的错误 EOF

Error EOF inside action Flex

我正在创建一个将使用 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)
 %%

感谢任何帮助

第一个动作是:

"," TOKEN(COMMA")

引用不匹配。

此外,

也有问题
 "<" TOKEN(LESS)_THAN)

而且我不清楚从那一行开始的所有行是否都错误地缩进了一个 space;如果是这样,那也是一个问题。

最后,TOKEN 宏(可能是从其他不需要它的地方复制的)没有什么意义,因为您可以使用 --debug command-line option to Flex to produce very accurate scanner traces, and there is a similar tracing facility in bison,它也会显示结果扫描器(包括令牌的名称,不幸的是,flex trace 没有提供)。

您有两个错别字,您必须将其更改为:

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

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