8

把课设上架到win10商店,一年之后竟然赚回了一副airpods……

 3 years ago
source link: https://zhuanlan.zhihu.com/p/63496363
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
把课设上架到win10商店,一年之后竟然赚回了一副airpods……

把课设上架到win10商店,一年之后竟然赚回了一副airpods……

同济大学 计算机科学与技术硕士在读

事情是这样的,去年上半年,大三下的我耗时一个多月终于完成了这门课设:

v2-bbabde26440a4cbc5ac7a55f53e0130f_720w.jpg

然而在绩点并没有多大收益:

说起来很惭愧,在知乎上号称一个星期就能做一个同等难度的编译器的牛人一抓一大把。然而在我亲身实践的时候却发现,编译原理这门课真的不简单。像算法与数据结构、爬虫、做网站这种热度高的方向,好的教程可以说是一抓一大把,从文档、教材到代码应有尽有,非常详细,自学起来及其方便,基本上是手把手教学。然而编译原理的自学资料是真的难找,据我所知有很多同学都是在github上直接pull某位前辈祖传的tiny c编译器,改一改就交差了,如果从前往后自己亲手做一遍,很有可能是做不出来的。

按步骤分解,词法分析、语法分析、语义分析、汇编生成这四个环节:

  1. 词法分析可以参考的代码非常之多(毕竟简单嘛,谁都可以水篇博客)。
  2. 语法分析的教程大部分是LL(1)的,夹杂有递归下降法。LR(0)、SLR、LR(1)、LALR这四种方法从前往后越来越罕见。
  3. 语义分析大部分是生成AST语法树,然后遍历生成中间码(因为上一步中LL分析法是主流),多遍扫描。
  4. 汇编生成,能做到这一步的已经非常少了,大部分博主都弃坑在了第二步。

我之所以足足用了四个星期才做完,是因为我走了一条非常难走的路,我的目标是用LR分析法做一边扫描的中间代码生成,这比常规的LL(1)难度大了很多,等我做完了才明白为什么网上的博客基本没有人用LR的,因为头不铁的基本都死在了语法分析上……

话说回来,经历了这么惨痛的教训,我觉得有必要给选了LR分析法的同学打打气,让他们在这条路上不再孤单,因此我决定开源这份课设:

该有的都有了,还赠送了一个不算难看的GUI:

斯是陋室,惟吾德馨——《陋室铭》

为了方便传播,我还把它上架到了win10商店:

令我意想不到的是,这个小玩意并没有石沉大海,每隔几天就会有人掏钱买它(我设置的是用户可以无限期试用,实质上试用等同于购买),十个月后已经有276次付款了,甚至还登上了畅销榜:



于是我就这样赚到了我的airpods:

为了感谢大家对我的认可,我决定重构代码,写一系列配套的高质量教学文章(假装我的水平已经可以当老师了),为编译原理这门课提供一份还算不错的入门教程!

github项目地址:

编辑于 2019-05-26

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK