javascript编写一个简单的编译器(理解抽象语法树AST)
Paper 0 (含义是: 定义纸的颜色是白色)
Pen 100 (含义是: 定义笔的颜色是黑色)
Line 0 50 100 50 (含义是:x轴0到100,说明是横向从起点到终点,y轴是50到50,说明是一张纸的中点是一条直线)。
1. 词法分析
2. 语法分析
3. 转换
4. 代码生成
1-1 词法分析(也可以叫做标记)
Paper 0
Pen 100
Line 0 50 100 50
[
{type: "word", value: "Paper"},
{type: "number", value: "100"}
]
function lexical (code) {
return code.split(/\s+/)
.filter(function(t) {
return t.length > 0
}).map(function(t) {
console.log(t);
return isNaN(t) ? {type: 'word', value: t} : {type: 'number', value: t}
});
}var res = lexical("Paper 0");
console.log(res); // [{type: "word", value: "Paper"}, {type: "number", value: '100'}]