语法实现中的文件描述符结束

时间:2008-12-08 06:17:28

标签: compiler-construction grammar parsing

我正在编写一个编译器实现,并希望检查是否已到达文件末尾?

我知道这可以使用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.
}

1 个答案:

答案 0 :(得分:3)

让你的词法分析器返回EOF的标记。

我建议你为两种情况返回令牌:

  1. getc()返回-1(通常的EOF标志)。在这种情况下,请将令牌文本设为空

  2. getc()返回'\x1a'。在这种情况下,请将此字符放在令牌文本中。

  3. 这允许你的语法区分这两种情况。