软件工程作业-方舟学习笔记02-前端与降级机制

所谓磨刀不误砍柴功,今天来梳理一下方舟编译器的前端部分。
前文中说过,编译器的前端中要有词法句法扫描器、解析器,这里还要加上语义规则器。大概的流程是这样的,程序的代码进入Scanner,分析出有意义、可修改的部分,进入到Parser中,和SemanticElaboration配合,解析出语义来,变成中端可以识别的形式,再传入中端里去。
让我很感兴趣的是,这个过程具体是怎样的呢?如何用机器辨别代码单元,如何分类,如何准确得知对应功能呢?
这个时候我想起来一种方法,大数据。通过分析大量代码来深度学习,迭代次数多了,自然就能辨别代码的词汇和句意了。当然这只是我的一个猜想。实现起来或许比整个方舟编译器还要困难。
在知乎用户小菜叔叔那里我得到了一部分算法原理。
首先是明确一类字符的格式。满足这个格式的字符串,一般就拥有同一类含义。
词法分析后,代码就变成了一串一串独立的字符串,然后送入语法分析器。按照既定的规则,把这些字符串排列起来,形成另一套完整规范的代码句子。而这样的一套套句子,正是中端可以识别分析的。
而如何解析,拆分,重构这些源代码,正是前端的核心算法。这一套算法将是我们下一步要去尝试分析的目标。
Mpl2mpl包内正是前端负责这一部分的算法所在的包。
⭐class_hierarchy
class_hierarchy
⭐class_init
class_init
⭐gen_check_cast
gen_check_cast

这三个文件的作用是辨别输入的程序代码中的父类、子类以及接口实现,然后收集这些接口定义的方法。检查本地的静态方法,然后扫描对比本地的方法和分辨出的代码,看程序中筛选出的方法对象是否可以替换。
然后是java_eh_lower和java_intrn_lowering。Lower这个单词很好理解:降级。
⭐java_eh_lower
java_eh_lower
⭐java_intrn_lowering
java_intrn_lowering

前者是用来识别输入的java代码其中的异常处理部分代码的,拿出来对比后将其替换为mpl可以识别的代码。后者则是识别更具有一般性的代码的,然后再把函数替换为mpl可以识别的形式。
先到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值