ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

编译器 简单总结

2021-12-23 14:30:00  阅读:182  来源: 互联网

标签:总结 AST subtract add value 编译器 简单 paren type


参考自:mirrors / starkwang / the-super-tiny-compiler-cn · GIT CODE

 比较简单的理解一下步骤:


比如要计算这个的值:2 + (4 - 2)

lisp 风格的代码实现:(add 2 (subtract 4 2))

C 风格的代码实现: add(2, subtract(4, 2))

现在把lisp编译成C(可以理解为由es6编译成es5。。。就这样理解吧)

1、把原始代码(lisp风格)分割成一些被称为 Token 的东西


 *
 *   (add 2 (subtract 4 2))
 *
 * 它产生的 Token 看起来或许是这样的:
 *
 *   [
 *     { type: 'paren',  value: '('        },
 *     { type: 'name',   value: 'add'      },
 *     { type: 'number', value: '2'        },
 *     { type: 'paren',  value: '('        },
 *     { type: 'name',   value: 'subtract' },
 *     { type: 'number', value: '4'        },
 *     { type: 'number', value: '2'        },
 *     { type: 'paren',  value: ')'        },
 *     { type: 'paren',  value: ')'        }
 *   ]

2、将 Token转换为抽象语法树(AST),AST描述了代码语句中的每一个片段以及它们之间的关系。

 * AST像这样:
 *
 *   {
 *     type: 'Program',
 *     body: [{
 *       type: 'CallExpression',
 *       name: 'add',
 *       params: [{
 *         type: 'NumberLiteral',
 *         value: '2'
 *       }, {
 *         type: 'CallExpression',
 *         name: 'subtract',
 *         params: [{
 *           type: 'NumberLiteral',
 *           value: '4'
 *         }, {
 *           type: 'NumberLiteral',
 *           value: '2'
 *         }]
 *       }]
 *     }]
 *   }

3、通过添加、移动、替代现有的 AST 生成一个全新的 AST,也就是lisp风格的AST转换成C风格的AST。

4、根据C风格的AST,生成C风格的代码。

标签:总结,AST,subtract,add,value,编译器,简单,paren,type
来源: https://blog.csdn.net/qq_35649088/article/details/122105779

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有