与前端训练营的日子 --Week03
发布于: 2020 年 11 月 15 日
又完成一周的学习,这鸭梨山大,各种琐事聚合,而且这周讲JavaScript的编译原理相关的知识,晕晕的,但是我还是尽力按照课程要求完成了学习任务。
这周以四则运算为例,通过LL算法构建AST。
通过正则表达式,进行分词,完成词法分析功能
var regexp = /([0-9\.]+)|([ \t]+)|([\r\n]+)|(\*)|(\/)|(\+)|(\-)/g;var dictionary = ["Number", "Whitespace", "LineTerminator", "*", "/", "+", "-"];
通过LL算法,完成语法分析功能
function MultiplicativeExpression(source) { if(source[0].type === "Number") { let node = { type:"MultiplicativeExpression", children:[source[0]] } source[0] = node; return MultiplicativeExpression(source); } if (source[0].type === "MultiplicativeExpression" && source[1] && source[1].type === "*") { let node = { type:"MultiplicativeExpression", operator:"*", children:[] } node.children.push(source.shift()); node.children.push(source.shift()); node.children.push(source.shift()); source.unshift(node); return MultiplicativeExpression(source); } if (source[0].type === "MultiplicativeExpression" && source[1] && source[1].type === "/") { let node = { type:"MultiplicativeExpression", operator:"/", children:[] } node.children.push(source.shift()); node.children.push(source.shift()); node.children.push(source.shift()); source.unshift(node); return MultiplicativeExpression(source); } if(source[0].type === "MultiplicativeExpression"){ return source[0]; } return MultiplicativeExpression(source); }
以我的能力,只能理解一部分,需要补充更多编译原理的知识。
参考资料
JavaScript词法:为什么12.toString会报错?
划线
评论
复制
发布于: 2020 年 11 月 15 日阅读数: 21
SamGe
关注
还未添加个人签名 2018.12.16 加入
iOS渣渣,Flutter练习生,极客大学在学🤣🤣
评论