C Bison和Flex在达到EOF时不会停止,只说;读一个标记:“quot;然后等待输入

C Bison和Flex在达到EOF时不会停止,只说;读一个标记:“quot;然后等待输入,c,parsing,bison,flex-lexer,eof,C,Parsing,Bison,Flex Lexer,Eof,嗯,我已经找了我的问题很长时间了,但我什么也没找到。我在下面看到的问题无助于我的处境: 情况说明: 我使用Bison和Flex解析一种定制语言,比如说这种语言的名字是MYLAN 在MYLAN语法中,我编写了%start-system\u-decl和system\u-decl:module\u-decls{…}在bison file.ypp中,没有表示“系统开始”或“系统结束”的标记,正如您所看到的,系统只是模块的组合。用MYLAN编写的文件可能如下所示: module ... end m

嗯,我已经找了我的问题很长时间了,但我什么也没找到。我在下面看到的问题无助于我的处境:

情况说明:

  • 我使用Bison和Flex解析一种定制语言,比如说这种语言的名字是MYLAN

  • 在MYLAN语法中,我编写了
    %start-system\u-decl
    system\u-decl:module\u-decls{…}在bison file.ypp中,没有表示“系统开始”或“系统结束”的标记,正如您所看到的,系统只是模块的组合。用MYLAN编写的文件可能如下所示:

    module
    ...
    end
    module
    ...
    end
    module
    ...
    end
    
  • 解析器对于.ypp中描述的所有语法都工作正常,但当它到达文件末尾时(应该是
    EOF
    ,但我不确定,因为我尝试了
    ,但问题仍然存在),它无法停止,它一直在等待令牌:

    [MYLANParser] $ ./MYLANParser example.mylan
    ...
    Stack now 0 3
    Entering state 6
    Reducing stack by rule 50 (line 458):
    $1 = nterm module_decls ()
    $2 = nterm module_decl ()
    $$ = nterm module_decls ()
    Stack now 0
    Entering state 3
    Reading a token:
    

  • 它只是卡在这里,解析器不会停止,有人能帮忙吗?非常感谢

    在解析器调用
    yylex
    之前,立即打印
    读取标记:
    字符串。在
    yylex
    返回后,它将打印返回的令牌(或EOF),因此出现的情况是,当到达EOF时,您的lexer挂起

    这样做的最可能的原因是有一个
    规则或
    yywrap
    函数,告诉lexer继续读取输入,但实际上不重置输入以指向其他内容(因此它只是读取另一个EOF并再次调用
    规则或
    yywrap
    函数,从而产生无限循环。)

    显示你的lexer(.l文件和yywrap函数),可能有人会告诉你它有什么问题