资讯专栏INFORMATION COLUMN

词法分析器

liaoyg8023 / 1216人阅读

摘要:词法分析器可以负责记录遇到的换行符的个数,以便给每个出错消息一个行号。词素是源程序中的一个字符序列,它和某个词法单元的模式匹配,并被词法分析器识别为该词法单元的一个实例。

词法分析器 前言:

词法分析是编译的第一阶段。它的含义是当程序进入编译器的时候首先是词法分析去分析它。也就可以得出词法分析器的主要任务。

词法分析器的主要任务:

读入源程序的输入字符(比如说C语言程序的#)、将它们组成词素, 生成并输出一个词法单元序列, 每个词法单元对应于一个词素。下一步就是进行语法分析(这不是本文章讨论的内容了), 这个词法单元序列被输出到语法分析器进行语法分析。

词法分析器的其他任务:

过滤掉源程序中的注释和空白(例如: 空格、换行符、制表符以及在输入中用于分隔词法单元的其他字符);

编译器生成的错误消息与源程序的位置联系起来。

词法分析器可以负责记录遇到的换行符的个数,以便给每个出错消息一个行号。在某些编译器中,词法分析器会建立源程序的一个拷贝,并将出错信息插入到适当位置。如果源程序使用了一个宏预处理器,则宏的扩展也可以由词法分析器完成。

词法分析器的处理阶段:

有的时候,词法分析器可以分成两个级联的处理阶段:

扫描阶段主要负责完成一些不需要生成词法单元的简单处理,比如删除注释和将多个连续的空白字符压缩成一个字符。

词法分析阶段是较为复杂的部分,它处理扫描阶段的输出并生成词法单元。

词法单元、模式和词素: 词法单元:

词法单元由一个词法单元名和一个可选的属性值组成。词法单元名是一个表示某种词法单位的抽象符号,比如一个特定的关键字,或者代表一个标识符的输入字符序列。词法单元名字是由语法分析器处理的输入符号。

模式描述了一个词法单元的词素可能具有的形式。当词法单元是一个关键字时,它的模式就是组成这个关键字的字符序列。对于标识和其他词法单元,模式是一个更加复杂的结构,它可以和很多符号串匹配。

词素是源程序中的一个字符序列,它和某个词法单元的模式匹配,并被词法分析器识别为该词法单元的一个实例。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/61191.html

相关文章

  • js 词法分析词法作用域

    摘要:引擎会在代码执行前进行词法分析,所以事实上,运行分为此法分析和执行两个阶段。词法作用域所谓词法作用域是说,其作用域为在定义时词法分析时就确定下来的,而并非在执行时确定。 先来看个常见的面试题如下: var a = 10; function test(){ alert(a); //undefined var a = 20; alert(a); //20 } te...

    2450184176 评论0 收藏0
  • js 词法分析词法作用域

    摘要:引擎会在代码执行前进行词法分析,所以事实上,运行分为此法分析和执行两个阶段。词法作用域所谓词法作用域是说,其作用域为在定义时词法分析时就确定下来的,而并非在执行时确定。 先来看个常见的面试题如下: var a = 10; function test(){ alert(a); //undefined var a = 20; alert(a); //20 } te...

    ashe 评论0 收藏0
  • js 词法分析词法作用域

    摘要:引擎会在代码执行前进行词法分析,所以事实上,运行分为此法分析和执行两个阶段。词法作用域所谓词法作用域是说,其作用域为在定义时词法分析时就确定下来的,而并非在执行时确定。 先来看个常见的面试题如下: var a = 10; function test(){ alert(a); //undefined var a = 20; alert(a); //20 } te...

    CrazyCodes 评论0 收藏0
  • 【PHP源码学习】2019-03-20 PHP词法分析

    摘要:词法分析它是编译过程的第一个阶段。可以使用等自动化词法分析工具,来帮助我们完成。在中,使用的词法分析器是,语法分析器是。其实进行词法分析和语法分析并生成某种数据结构的过程,就是一个解码的过程。 baiyan 全部视频:https://segmentfault.com/a/11... 原视频地址:http://replay.xesv5.com/ll/24... 基本概念 在PHP7中,...

    SolomonXie 评论0 收藏0
  • 从连续赋值到:词法分析、函数执行原理

    摘要:先说下这个老话题连续赋值例结果是什么这句简单,而这句呢答案是,变成了全局变量了这是实际执行顺序未使用声明,所以变全局变量了例很早以前的面试题目了,相信很多人知道答案,考点词法分析执行顺序运算符优先级等这是我理解的实际执行顺序我是这么猜想的自 先说下这个老话题:连续赋值 例1: function a(){ var o1 = o2 = 5; } a(); console.l...

    rose 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<