当前位置:网站首页>3 词法分析
3 词法分析
2022-07-25 22:24:00 【你回到了你的家】
1 词法分析器的作用
词法分析是编译的第一阶段。词法分析器的主要任务是读入源程序的输入字符、将它们组成词素,生成并输出一个词法单元序列,每个词法单元对应于一个词素。这个词法单元序列被输出到语法分析器进行语法分析。词法分析器通常还要和符号表进行交互。当词法分析器发现了一个标识符的词素时,它要将这个词素添加到符号表中。在某些情况下,词法分析器会从符号表中读取有关标识符种类的信息,以确定向语法分析器传送哪个词法单元。
这种交互过程在图3-1中给出。通常,交互是由语法分析器调用词法分析器来实现的。图中的命令getNextToken 所指示的调用使得词法分析器从它的输入中不断读取字符,直到它识别出下一个词素为止。词法分析器根据这个词素生成下一个词法单元并返回给语法分析器。

词法分析器在编译器中负责读取源程序,因此它还会完成一些识别词素之外的其他任务。任务之一是过滤掉源程序中的注释和空白(空格、换行符、制表符以及在输入中用于分隔词法单元的其他字符);另一个任务是将编译器生成的错误消息与源程序的位置联系起来。例如,词法分析器可以负责记录遇到的换行符的个数,以便给每个出错消息赋予一个行号。在某些编译器中,词法分析器会建立源程序的一个拷贝,并将出错消息插人到适当位置。如果源程序使用了一个宏预处理器,则宏的扩展也可以由词法分析器完成。
有时,词法分析器可以分成两个级联的处理阶段:
- 扫描阶段主要负贵完成一些不需要生成词法单元的简单处理,比如删除注释和将多个连续的空白字符压缩成一个字符。
- 词法分析阶段是较为复杂的部分,它处理扫描阶段的输出并生成词法单元。
1.1 词法分析及语法分析
把编译过程的分析部分划分为词法分析和语法分析阶段有如下几个原因:
- 最重要的考虑是简化编译器的设计。将词法分析和语法分析分离通常使我们至少可以简化其中的一项任务。例如,如果一个语法分析器必须把空白符和注释当作语法单元进行处理,那么它就会比那些假设空白和注释已经被词法分析器过滤掉的处理器复杂得多。如果我们正在设计一个新的语言,将词法和语法分开考虑有助于我们得到一个更加清晰的语言设计方案。
- 提高编译器的效率。把词法分析器独立出来使我们能够使用专用于词法分析任务、不进行语法分析的技术。此外,我们可以使用专门的用于读取读入字符的缓冲技术来显著提高编译器的速度。
- 增强编译器的可移植性。输入设备相关的特殊性可以被限制在词法分析器中。
边栏推荐
- JMeter websocket interface test
- Synchronized and volatile
- Why is the integer type 128 to byte -128
- Leetcode 106. construct binary tree from middle order and post order traversal sequence
- Selenium basic use and use selenium to capture the recruitment information of a website (continuously updating)
- 2day
- Data governance under data platform
- 完啦,上班三个月,变秃了
- 科大讯飞智能办公本Air电纸书阅读器,让我的工作生活更加健康
- ThreadLocal 总结(未完待续)
猜你喜欢

Redis基础2(笔记)

win10搭建flutter环境踩坑日记

Basic principle of torque motor control

『Skywalking』.NET Core快速接入分布式链路追踪平台

About vscode usage+ Solutions to the problem of tab failure

It's over. I went to work for three months and became bald

Selenium basic use and use selenium to capture the recruitment information of a website (continuously updating)

The third day of Xiaobai programmer

H5 lucky scratch lottery free official account + direct operation

Square root of X
随机推荐
JSP novice
Redis基础2(笔记)
面向领域模型编程
Based on if nesting and function call
vim用法记录
[C syntax] void*
聚名十年,说出你的故事,百万豪礼等你拿
访问者模式(visitor)模式
6-17 vulnerability exploitation - deserialization remote command execution vulnerability
scrapy无缝对接布隆过滤器
3dslicer import cone beam CT image
IPv4 addresses have been completely exhausted, and the Internet can work normally. NAT is the greatest contributor!
[leetcode] 502.ipo (difficult)
MySQL --- 子查询 - 列子查询(多行子查询)
Smart S7-200 PLC channel free mapping function block (do_map)
arcgis开发常用源码
H5幸运刮刮乐抽奖 免公众号+直运营
Wkid in ArcGIS
The automation testing post spent 20K recruiting, but in the end, there was no suitable one. Both fresh students are better than them
数学规划分类 Math Programming Classfication