编译器的结构——词法分析
来源:互联网 发布:淘宝上有个正义哥代购 编辑:程序博客网 时间:2024/05/19 18:46
编译器的第一个步骤成为词法分析或扫描。词法分析器读入组成源程序的字符流,并且把他们组织成为有意义的词素的序列。对于每个词素,词法分析器产生如下形式的词法单元(token)作为输出: <token-name, attribute-value> <名称,值> 这个词法单元被传送给下一个步骤,即语法分析。在这个词法单元中,第一个分量token-name是一个由语法分析步骤使用的抽象符号,第二个分量attribute-value指向符号表中关于这个词法单元的条目。符号表条目的信息会被语义分析和代码生成步骤使用。 比如,假设一个源程序包含如下的赋值语句 position = initial + rate * 60; 这个赋值语句中的字符可以组成如下词素,并映射成词法单元。这些词法单元将被传递给语法分析阶段。 position是一个词素,被映射成词法单元<id,1>,id是表示标识符的抽象符号,1指向符号表中position对应的条目。一个标识符对应的符号表条目存放该标识符有关的信息,比如它的名字和类型。 赋值符号=是一个词素,被映射成词法单元<=>。因为这个词法单元不需要属性值,所以我们省略第二个分量。 initial被映射为<id,2>。 +被映射为<+>。 rate被映射为<id,3>。 *被映射为<*>。 60被映射为<60>。(技术上讲,应该映射为<number,60>,后续讨论) ;被映射为<;> 分隔词素的空格会被词法分析器忽略掉。 词法分析后,上述赋值语句被表示为如下词法单元序列: <id,1> <=> <id,2> <+> <id,3> <*> <60> <;> =,+,*分别是表示赋值,加法运算,乘法运算的抽象符号。
阅读全文
0 0
- 编译器的结构——词法分析
- 编译器DIY——词法分析
- 编译器-词法分析
- 编译器设计:词法分析
- LCC编译器的源程序分析(6)词法分析
- LCC编译器的源程序分析(7)词法分析
- [转载]LCC编译器的源程序分析(6)词法分析
- [转载]LCC编译器的源程序分析(7)词法分析
- 编译器之词法分析c
- 编译器架构的王者LLVM——(4)简单的词法和语法分析
- 手工打造编译器之词法分析1
- 手工打造编译器之词法分析2
- Tiny语言编译器开发之词法分析
- C编译器剖析_2.2 词法分析
- MYC编译器源码之词法分析
- scheme编译器-词法分析-生成记号流
- JavaScript的词法结构
- JavaScript的词法结构
- CPU基本的那些事情
- php中CI框架定义全局变量
- 一个rm -rf *命令执行后, 整个人都不好了
- 2.docker常用命令
- WIN10 AMD显卡驱动安装后 系统无法加载 解决方案
- 编译器的结构——词法分析
- 异步IO、协程
- Android之ndk编译出现"undefined reference to method"解决办法
- TCP代理的python实现(包括客户端/服务器/TCP代理三部分代码)
- easyui datagrid 单元格赋值
- 【Mycat】数据库性能提升利器(一)——Mycat数据切分
- SSH的整合
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
- 一大波金融Library来袭之numpy篇(12/10)