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,这是接口一个很棒的特性:暴露接口,隐藏类的实现,第三方调用时,只关心接口怎么使用,不需要知道具体类是怎么实现的。