我工作的一个编译器实施,并希望检查,如果该结束的文件已经达到?

我知道这可以使用的yywrap()功能的法文件,但要求是,我们希望,如果EOF被明确地定义为在六值0x1a,那么我们如何参考。

例如:

主() { printf("检查EOF标记 ");'0x1a' <--实际EOF标记。

我希望上述的不是一个语法错误,但报告为一个错误 不平衡的括号,或是错误地定义。

可以上述样做?我的要求是只有EOF令牌在分析器,这不幸的是,我未能这样做,直到日期:-((外,其余的工作将容易完成以后,我就必须得到一项规则,如:

print    :    print_stmt '(' stmt_valid ')' colon '\n' 
{
    OK do the rest
}
         |    print_stmt '(' stmt_valid ')' colon end_indicator
{
    print error message and close application.
}
有帮助吗?

解决方案

让你的语法分析程序返回标记的EOF.

我建议你回返的标记有两种情况:

  1. getc() 返回 -1 (通常EOF标志)。在这种情况下,让该标记空

  2. getc() 返回 '\x1a'.在这种情况下,把这个角色在令的文本。

这使你文法之间的区别这两种情况。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top