Token&Tokenizer

本文深入探讨了Esprima作为ECMAScript词法语法解析器的角色,如何将JS源码转换为Token集合,以及Token如何唯一标识代码状态。同时,文章详细介绍了自定义接口IDoom3Token和IDoom3Tokenizer的设计,展示了接口暴露与类实现分离的编程理念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Token与Tokenizer
Esprima(ECMAScript词法语法解析器)是Tokenizer,会将js源码读取,进行处理,结果是Token。js源码解析成Token的集合,Token能唯一的标出一种状态。

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

定义接口

export interface IDoom3Token {
    reset(): void;
    isString(str: string): boolean;
    readonly type: ETokenType;
    getString(): string;
    getFloat(): number;
    getInt(): number;
}
export interface IDoom3Tokenizer  {
    setSource(source: string): void;//设置要解析的字符串
    reset(): void;//重置当前索引为0
    getNextToken(token: IDoom3Token): boolean;//获取下一个token
}

声明接口的时使用export关键字导出,但在实现Doom3Token中没有使用export,这是接口一个很棒的特性:暴露接口,隐藏类的实现,第三方调用时,只关心接口怎么使用,不需要知道具体类是怎么实现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值