编译原理手记02-词法分析
2014-07-21 16:52
736 查看
词法分析的作用就是两个字——"断词"。
编译器从源代码文件中读入的是一个接一个的字符,词法分析的目的就是把这些字符流拼成独立的字符串然后输送给语法分析器。
比如源程序中有这么一段字符流:
for i:=0; i<100; i++ {}
而词法分析器把这段字符流处理后的结果就会如下(每次处理的结果放在一行):
for
i
:=
0
;
i
<
100
;
i
++
{
}
可以看到,词法分析器从字符流中分隔出了关键字"for"、标示符"i"、常数"0""100"和符号";""<""++""{""}"。我们把每一次分隔出的结果字符串叫做token。
词法分析器要从大量的输入流中分析出五类元素:
1.关键字:if for while这类程序固有的字符串
2.标识符:变量名一类的字符串
3.常量: 1234、true、false、"this is a string"这类常量
4.操作符: +、++、-、--、*等用于计算或操作的符号
5.界符: ( 、)、{ 、}这类用于程序分块的边界符号
至于词法分析器要怎么辨识这些token的类型,就要考符号表了。
除了分隔出token,词法分析器的另一个重要任务就是要跳过那些没用的字符,例如空格、换行符和注释。
空格和换行符应该是比较好解决的,跳过注释的时候要小心下面这种情况:
const str string = "this is a constant string. /*this is common.*/ it may cause complex."
上面这句定义一个字符常数,但是里面有一个无效的注释,要小心这种情况,这时不应该跳过属于字符常数的这些字符。
词法分析器通常会实现成一个函数或一个类,需要的时候就调用一次。
编译器从源代码文件中读入的是一个接一个的字符,词法分析的目的就是把这些字符流拼成独立的字符串然后输送给语法分析器。
比如源程序中有这么一段字符流:
for i:=0; i<100; i++ {}
而词法分析器把这段字符流处理后的结果就会如下(每次处理的结果放在一行):
for
i
:=
0
;
i
<
100
;
i
++
{
}
可以看到,词法分析器从字符流中分隔出了关键字"for"、标示符"i"、常数"0""100"和符号";""<""++""{""}"。我们把每一次分隔出的结果字符串叫做token。
词法分析器要从大量的输入流中分析出五类元素:
1.关键字:if for while这类程序固有的字符串
2.标识符:变量名一类的字符串
3.常量: 1234、true、false、"this is a string"这类常量
4.操作符: +、++、-、--、*等用于计算或操作的符号
5.界符: ( 、)、{ 、}这类用于程序分块的边界符号
至于词法分析器要怎么辨识这些token的类型,就要考符号表了。
除了分隔出token,词法分析器的另一个重要任务就是要跳过那些没用的字符,例如空格、换行符和注释。
空格和换行符应该是比较好解决的,跳过注释的时候要小心下面这种情况:
const str string = "this is a constant string. /*this is common.*/ it may cause complex."
上面这句定义一个字符常数,但是里面有一个无效的注释,要小心这种情况,这时不应该跳过属于字符常数的这些字符。
词法分析器通常会实现成一个函数或一个类,需要的时候就调用一次。
相关文章推荐
- 编译原理手记05-文法和语法分析中一些概念的解释
- 编译原理-词法分析02-正则表达式
- 关于Basic程序解释器及编译原理的简单化(1)--词法分析和代数式求值
- 关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码
- 链式队列的c++代码和原理以及编译分析
- [系列][编译原理]LR(0)分析算法的定义
- [系列][编译原理]上下文无关文法及分析
- 编译原理之自顶向下分析
- 编译原理之LL(1)文法分析(使用分析表)
- 编译原理语法分析LR1
- 编译原理——算符优先分析
- GCC/G++编译原理分析
- 关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(七):GDAL C#接口库的编译与SharpMap(Change Set 21021)对影像的支持研究
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(五):WebGIS原理分析及思考
- 编译原理文法分析【已解决】
- 关于Basic程序解释器及编译原理的简单化(1)--词法分析和代数式求值
- 编译原理-LL(1)预测分析实验 c源代码
- 编译原理--实验一 词法分析
- [系列][编译原理]词法分析