编译器设计中的输入缓冲是什么?


词法分析 必须每次都访问 辅助存储器 来识别标记。这既耗时又昂贵。因此,输入字符串被存储到缓冲区中,然后由词法分析器进行扫描。

词法分析器从左到右逐个字符扫描输入字符串以识别标记。它使用两个指针来扫描标记:

  • 起始指针 (bptr) - 它指向要读取的字符串的开头。

  • 前瞻指针 (lptr) - 它向前移动以搜索标记的结尾。

示例 - 对于语句 int a, b;

  • 两个指针都从存储在缓冲区中的字符串的开头开始。

  • 前瞻指针扫描缓冲区直到找到标记。

  • 在确定标记 ("int") 之前,必须检查标记 ("int") 后面的字符 ("空格")。

  • 处理完标记 ("int") 后,两个指针将设置为下一个标记 ('a'),并且此过程将对整个程序重复。

缓冲区可以分成两半。如果前瞻指针向第一半的中间移动,则第二半将填充要读取的新字符。如果前瞻指针移动到第二半缓冲区的右端,则第一半将填充新字符,然后继续此过程。

哨兵 - 哨兵用于进行检查,每次向前指针移动时,都会进行检查以确保缓冲区的一半没有移出范围。如果移出范围,则应重新加载另一半。

缓冲区对 - 一种专门的缓冲技术可以减少处理输入字符时在传输字符所需的开销。它包括两个缓冲区,每个缓冲区包含 N 个字符大小,并交替重新加载。

有两个指针,例如词素开始和向前指针得到支持。词素开始指向当前发现的词素的开头。向前指针扫描前方,直到发现模式匹配。在词素开始之前,词素开始设置为仅构造的词素之后的字符,而向前指针设置为其右侧的字符。

初步扫描 - 一些过程最好在将字符从源文件移动到缓冲区时执行。例如,它可以删除注释。像 FORTRAN 这样的语言忽略空格,可以将它们从字符流中删除。它还可以将多个空格的字符串压缩成一个空格。对要进行词法分析的字符流进行预处理可以避免在空格字符串上来回移动前瞻指针的麻烦。

更新于: 2023年11月1日

46K+ 浏览量

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告