lambada

25行代码实现一个简单的编译器

我与影子孤独终老i 提交于 2019-12-01 12:16:36
起因 《 25行JavaScript语句实现一个简单的编译器 》实现的是一个简单到不能再简单的玩具的玩具,他的魔法是函数式编程简化了js代码。java 8提供了函数式编程的支持,昨晚脑子抽风突然兴趣java也可以实现一个如此简单的编译器! java和js语言差异 java相对js这类胶水语言来说还是相对啰嗦的,一些动态语言的特性在java里并不具备。《 25行JavaScript语句实现一个简单的编译器 》的作者是个js高手js用得溜溜的,下面说说他用到js里有而java没有的功能。 js 字符串模板 他在Transpiler中使用ES2015新增的模板字符串功能。 `(${ast.expr.map(transpileNode).join(' ' + opMap[ast.val] + ' ')})`; js内置 map和简单的赋值语法 const node = { val: consume(), type: Op, expr: [] }; 其他胶水语言的话对应的是tuple,java要实现的话还真啰嗦不少。 模式匹配 (实际这是js的map啊啊啊) const opAcMap = { 'sum': args => args.reduce((a, b) => a + b, 0), 'sub': args => args.reduce((a, b) => a - b), 'div':