打开控制台查看demo输出



语法分析是遍历每个标记,寻找语法信息,并且构建一个叫做
AST(抽象语法树)的对象。
下面我们对上面词法分析生成的标记
[{type: "word", value: "Paper"}, {type: "number", value: '100'}] 这样的数据,使用语法分析
构建一个
AST(抽象语法树)的对象。代码如下:

function parser(tokens) {

var AST = {

type: 'Drawing',

body: []

};

// 循环依次取出第一个元素,然后删除第一个元素

while (tokens.length > 0) {

var currentItem = tokens.shift();

// 判断类型,如果是单词的话,我们就分析它的语法

if (currentItem.type === 'word') {

switch(currentItem.value) {

case 'Paper' :

var expression = {

type: 'CallExpression',

name: 'Paper',

arguments: []

};

// 继续数组中字段的类型

var nextItem = tokens.shift();

if (nextItem.type === 'number') {

// 在expression对象内部加入参数信息 expression.arguments.push({

type: 'NumberLiteral',

value: nextItem.value

})

// 将expression对象放入我们的AST的body内 AST.body.push(expression);

} else {

throw 'Paper command must be followed by a number.'

}

break;

case 'Pen' :

/* 更多代码 */

break;

case 'Line':

/* 更多代码 */

break;

return AST;

}var data = [

{ type: 'word', value: 'Paper'},

{ type: 'number', value: 100}

];var output = parser(data);

console.log(output); // 打印信息如下

/*

var output = {

'type': 'Drawing',

'body': [{

"type": "CallExpression",

"name": "Paper",

"arguments": [{

"type": "NumberLiteral",

"value": "100"

想要学习前端开发的同学,可以加群:
543627393 学习哦!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值