Compiler construction 语法实现中的文件结尾描述符
我正在编写一个编译器实现,希望检查是否已到达文件末尾 我知道这可以使用lex文件中的yywrap()函数来完成,但要求是,如果EOF被显式定义为十六进制值0x1a,那么我们如何引用它 例如: main() {Compiler construction 语法实现中的文件结尾描述符,compiler-construction,grammar,parsing,Compiler Construction,Grammar,Parsing,我正在编写一个编译器实现,希望检查是否已到达文件末尾 我知道这可以使用lex文件中的yywrap()函数来完成,但要求是,如果EOF被显式定义为十六进制值0x1a,那么我们如何引用它 例如: main() { printf(“Check EOF marker\n”);“0x1a”使您的lexer为EOF返回一个令牌 我建议您退回两种情况下的代币: getc()返回-1(通常的EOF符号)。在这种情况下,将令牌文本设为空 getc()返回了'\x1a'。在这种情况下,请将此字符放在令牌文本中 这允
printf(“Check EOF marker\n”);“0x1a”使您的lexer为EOF返回一个令牌 我建议您退回两种情况下的代币:
getc()
返回-1
(通常的EOF符号)。在这种情况下,将令牌文本设为空getc()
返回了'\x1a'
。在这种情况下,请将此字符放在令牌文本中这允许您的语法区分这两种情况。使您的lexer为EOF返回一个令牌 我建议您退回两种情况下的代币:
getc()
返回-1
(通常的EOF符号)。在这种情况下,将令牌文本设为空getc()
返回了'\x1a'
。在这种情况下,请将此字符放在令牌文本中这使您的语法能够区分这两种情况。您的配置是什么?我知道您使用lex进行扫描,使用yacc进行解析。为什么不让lex读取EOF字符并返回给yacc一个专门的EOF令牌?您的配置是什么?我知道您使用lex进行扫描,使用yacc进行解析。为什么不让lex读取EOF字符并返回给yacc读取EOF字符并向yacc返回专用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.
}