我正在创建一个将使用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)
%%
感谢任何帮助
答案 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)