您的位置:首页 > 其它

编译原理手记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."

上面这句定义一个字符常数,但是里面有一个无效的注释,要小心这种情况,这时不应该跳过属于字符常数的这些字符。

词法分析器通常会实现成一个函数或一个类,需要的时候就调用一次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息