2.1 Token与Tokenizer

  简单起见,我们使用js代码作为示例,来了解一下js的Token相关内容,以加深对Token的理解,代码如下:

if ( b === true )
    alert ( "true" ) ;

  在浏览器中输入网址:http://esprima.org/demo/parse.html 后,并将上述代码黏贴到左侧文本编辑框,然后选择Tokens Tab选项,我们就会获得如下结果:

[
    {
        "type" : "Keyword" ,
        "value" : "if"
    } ,
    {
        "type" : "Punctuator" ,
        "value" : "("
    } ,
    {
        "type" : "Identifier" ,
        "value" : "b"
    } ,
    {
        "type" : "Punctuator" ,
        "value" :  ==="
    } ,
    {
        "type" : "Boolean" ,
        "value" : "true"
    } ,
    {
        "type" : "Punctuator" ,
        "value" : ")"
    } ,
    {
        "type" : "Identifier" ,
        "value" : "alert"
    } ,
    {
        "type" : "Punctuator" ,
        "value" : "("
    } ,
    {
        "type" : "String" ,
        "value": "\"true\""
    } ,
    {
        "type" : "Punctuator" ,
        "value" : ")"
    } ,
    {
        "type" : "Punctuator" ,
        "value" : ";"
    }
]

  通过上述代码,我们可以看到,esprima(ECMAScript词法语法解析器)会将js源码解析成Token的集合表示,每个Token具有type属性,表示该Token的类型分类,并且具有value属性,表示该Token的值是什么。

  由此可见,Token(标记或记号)就是指一组不可分割的字符或字符串,它能唯一的、没有歧义的标记出一种状态。本质上来说,就是特殊的字符或字符串(例如if、=== 等)。而esprima则是Tokenizer,其作用是将字符串表示的js源码数据读取进来,按照预先设定的标准进行分类处理,处理的结果就是Token。

  事实上esprima是一个ECMAScript解析器,包含词法解析和语法解析,最终会将js源码解析成抽象语法树(Abstract Syntax Tree,简称AST),而在这里,为了演示的原因,我们仅仅使用了esprima的词法解析功能,并没有使用到语法解析功能。

随风而行之青衫磊落险峰行(www.buleifeng.top) all right reserved,powered by Gitbook本文件修订时间: 2019-10-09 21:39:14

results matching ""

    No results matching ""