无论是对我们的代码解释执行,还是编译执行,词法分析都是作为第一个环节开始的。
词法分析的过程,可以理解为将字符序列转换为单词(Token)序列的过程。
本文中以如下的coffeescript代码为示例:

# Assignment:
number = 42
opposite = true
# Conditions:
number = -42 if opposite
# Functions:
square = (x) -> x * x

这里的单词(Token)是指一系列最小的对程序来说有意义的单元,例如"number", "=", "(换行)", "(空格)"等等。
对于coffeescript而言,有10中类型的token
1. identifier(标识符):脚本中各种独立的标示符,例如number,opposite等等
2. comment(注释)
3. whitespace(空格)
4. line(换行)
5. heredoc(本地注释):以"""或者'''开头的代码注释
6. string(字符串):匹配的coffeescript中得字符串,例如'test'(coffeescript中得字符串用单引号围起来)
7. number(数字):匹配的数字,包括了8进制数字和16进制的数字
8. regex(正则表达式)
9. js(js):匹配的正则为/^[^\\](?:\.[^\`])*`/,我觉得我的解释太TM多余了,还是看代码来的直观
10. literal(加减乘除,位运算,与或之列的符号)
输入的是如上的一串coffeescript的代码,输出则是按照这是种token分类好的程序的最小单元的一个数组,提供给语法分析器继续进行分析。
例如:


Enjoy it !
转载请注明出处
botobe.net
本文Github链接