编译器 简单总结

参考自: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风格的代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用,你提到了一个简单的MySQL编译器实现,但是这里提到的编译器是指用于解析和执MySQL语句的工具,而不是用于编译MySQL数据库本身的工具。因此,对于MySQL数据库的编译器,实际上是指用于将MySQL的源代码编译成可执文件的工具。 根据引用,在QT5.14.1下使用minGW73_32编译器,可以直接使用编译结果替换MySQL数据库,而不需要重新编译。这意味着你可以直接使用该编译器来开发和运MySQL数据库应用程序。 总结起来,对于MySQL数据库的编译器,你可以使用QT5.14.1下基于minGW73_32编译器的MySQL数据库编译结果。这个编译器可以用于开发和运MySQL数据库应用程序。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Compiler_MYSQL_HOMEWORKs:适用于Java的简单MYSQL编译器](https://download.csdn.net/download/weixin_42110362/18334030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [QT5.14.1下基于minGW73-32编译器的mysql数据库编译](https://download.csdn.net/download/yepu7/87495860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值