我正在编写一个编译器实现,并希望检查是否已到达文件末尾?
我知道这可以使用lex文件中的yywrap()函数来完成,但要求是我们想要如果EOF明确定义为十六进制值0x1a,那么我们如何引用它。
示例:
main()的 { printf(“检查EOF标记\ n”); '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.
}
答案 0 :(得分:3)
让你的词法分析器返回EOF的标记。
我建议你为两种情况返回令牌:
getc()
返回-1
(通常的EOF标志)。在这种情况下,请将令牌文本设为空
getc()
返回'\x1a'
。在这种情况下,请将此字符放在令牌文本中。
这允许你的语法区分这两种情况。