为什么在词法分析中使用缓冲?什么是EOF的最佳价值?
答案 0 :(得分:1)
EOF通常定义为(-1)。
在我的时代,我使用lex / yacc,flex / bison甚至是手写的词法分析器和LL(1)解析器制作了相当多的解析器。 “缓冲”是相当模糊的,可能意味着多个事物(输入字符或输出标记),但我可以想象,词法分析器有一个输入缓冲区,可以向前看。当分析'for(foo = 0; foo< 10; foo ++)'时,关键字'for'的标记在看到它后面的空格时产生。第一个标识符'foo'的标记在看到字符'='时生成。它需要将标识符的名称传递给解析器,因此需要一个缓冲区,因此在生成令牌时,“foo”一词仍然在内存中。
答案 1 :(得分:0)
词法分析的速度令人担忧。 另外,需要检查几个前置字符才能找到匹配项。
答案 2 :(得分:0)
词法分析器从左到右逐个字符地扫描输入字符串,然后从硬盘或二级存储中读取这些输入字符。根据程序的大小,这可能需要大量的系统调用,并且可以使系统慢。这就是我们使用输入缓冲技术的原因。 输入缓冲区是一个位置,在它继续到 CPU 进行处理之前保存所有传入的信息。 您还可以从这里了解更多信息: https://www.geeksforgeeks.org/input-buffering-in-compiler-design/