为什么在这个 flex 程序上过早的 eof?

问题描述

我正在制作一个 flex 程序,它以描述形状的字符串的形式接收用户的输入。 现在我的代码看起来是正确的,但我在编译时过早地出现了。

我也试过做类似问题的答案,但仍然没有。

%{
int flag = 0; 
}%
%%
"point" + [A-H]|"line" + [A-H]{2}|"triangle" + [A-H]{3}|"square" + [A-H]{4}|"pentagon" + [A-H] {5}|"hexagon" + [A-H]{6}|"heptagon" + [A-H]{7}|"octagon" + [A-H]{8}
flag=1; 
%%
main(){
    yylex();
    if (flag == 1){ 
        printf("Accepted");
    }else{
        printf("Not accepted");
    }
}

解决方法

您的 %{ 未关闭,因为您写的是 }% 而不是 %}。因此 flex 认为 }% 及其之后的所有内容都应该是 C 代码的一部分,并且在到达文件末尾时仍在等待关闭的 %}