-1

为什么在词法分析中使用缓冲?EOF 的最佳价值是什么?

4

3 回答 3

1

EOF 通常定义为 (-1)。

在我的时间里,我使用 lex/yacc、flex/bison 甚至是手写的词法分析器和 LL(1) 解析器制作了很多解析器。“缓冲”相当模糊,可能意味着多种事物(输入字符或输出标记),但我可以想象词法分析器有一个输入缓冲区,它可以向前看。在分析“for (foo=0;foo<10;foo++)”时,一旦看到后面的空格,就会生成关键字“for”的标记。一旦看到字符“=”,就会生成第一个标识符“foo”的标记。它希望将标识符的名称传递给解析器,因此需要一个缓冲区,以便在生成令牌时单词“foo”仍在内存中的某个位置。

于 2015-02-11T12:40:39.763 回答
0

词法分析器从左到右逐个字符地扫描输入字符串,然后从硬盘或二级存储中读取这些输入字符。根据程序的大小,这可能需要大量的系统调用,并且会使系统变慢。那是为什么我们使用输入缓冲技术。输入缓冲区是一个位置,在它继续到 CPU 处理之前保存所有传入信息。您还可以从这里了解更多信息: https ://www.geeksforgeeks.org/input-buffering-in-compiler-design/

于 2021-02-16T14:09:35.323 回答
0

词法分析的速度是一个问题。此外,需要检查几个前面的字符才能找到匹配项。

于 2018-10-21T19:21:33.483 回答