# macOS开发（语法分析器）

> 原文：https://pjhubs.com/2018/06/13/macOS%E5%BC%80%E5%8F%91%EF%BC%88%E8%AF%AD%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8%EF%BC%89/
>
> 作者：PJHubs · 发布于 2018-06-13 · 标签：Swift、macOS、编译原理

很遗憾，语法分析器的实验到现在才做完，主要是因为在当时实验要求完成的时间中，还在负责公司产品的正常迭代，加上当时有新同学加入，要在保证产品迭代质量的基础上还要保证新同学能够快速上手，接着还有驾照的科三科四，最后为了弥补心中的遗憾，参加了一个Apple中国和浙大举办的比赛，十分梦想去参加一次WWDC，还打算通过明年的`WWDC Scholarship`，但是看了今年学长们的论文检测、毕业答辩时间等一些事情，正好交叉在了一块，感觉到明年再准备将会十分拘谨，噢，还有一门课的考试。

因此这几件事情彻底占据了我几乎所有空余时间，不过好在一切都顺利结束了，把公司产品迭代完成后本想着休息一波，整理整理思路，跟leader商量之后，他并不想让我走，我也能懂leader的意思，确实我也看出来了招到一个合适人非常不容易，更何况他们只想要实习生，所以找到一个符合要求的实习生难度可想而知。驾照也顺利拿到了，拿到的当天删光了所有与驾校有关系的微信和群，真是烦透了。比赛的事情在初赛截止之前的前一天晚上提交了所有内容，刚去看了一眼，从目前评委的评价来看，提交的两个作品都极有可能进入复赛，如果两个产品都进入了复赛，真不知道是喜是忧了。

OK，以上就是这段时间一直没更新blog的主要原因。接下来看看周末到现在的成果吧。

<img src="https://i.loli.net/2018/06/13/5b20b8368112d.gif" width = "100%" height = "100%" align=center />

做的事情跟大家也都是一样的，就是一个非常普通的语法分析器，网上相关的代码都已经烂大街了，刚才去查实验，通过老师的语气和表情也能揣摩出来，并没有设么值得稀奇的地方，但是据鄙人所知，我身边的同学们几乎都是Java，而且代码来源“不祥”。不是说我的同学们就差，我就好，而是想通过这个对比，来突出我完成的这份实验真正与众不同的地方。

是的。它也是基于`Swift`，而且跟之前的[词法分析器](http://pjhubs.com/2018/04/16/macOS%E5%BC%80%E5%8F%91%EF%BC%88%E8%AF%8D%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8%EF%BC%89/)一样，同样是基于`Cocoa`框架，通过`StoryBoard`搭建页面逻辑，整体来看非常的简单，没有什么太值得展开说的地方。不过我觉得唯一可以值得炫耀的地方估计可能是它是**第一份**全网基于`Swift`的通用型语法分析器吧hhhh。受限于实验允许完成的时间（上周五开始写，直到昨天晚上，因为今天要查），并没有测试太多的文法，断断续续的根据四个文法调试了程序，新增的最后一个文法是因为刚才去查实验时，老师没让我说太多，直接让我先试试看课本上的一道课后练习。当时我心里没多大谱，因为这个语法分析器并没有经历过多少特殊的文法调试，深知肯定会出问题，输入文法后发现还真的出了问题，不过在当时的环境下，我并不能看出来其中的端倪，回到宿舍后，休息了一下，重新整理了思路，最新的提交已经解决了这个问题，并附上了对应的新文法（configuration5）。

这其中的大部分实现流程，就是把口头解决问题的思路转化成`Swift`代码，并没有多少技术难点，不过给我的感觉是真的是有些麻烦，怪不得有些同学会说：“这实验应该没人能做得出来吧，能自己全写出来的得有多厉害啊！”。当时为了顾及女朋友对实验的掌控能力，是想最初直接用C/C++，但是突然考虑到这最终肯定是无法把独特性构建出来，再加上当时确实十分想通过某个机会all in到`Swift`中，本来很是纠结，但是她突然拿到了上届一个学长的代码，这回好办了，基本上大家的实验都过了。emmmm

可以说，也就是有了上个实验的基础，直接让我狠下心来把接下来新开所有项目统统使用`Swift`（顺便改造老项目）开发。每个想动手写出来该实验的同学最终的思路都大同小异，需要考虑的细节问题视个人思维缜密程度而定，我的思路如果你有兴趣，看看就明白啦~


[项目传送门](https://github.com/windstormeye/MacMorePractices)


（这文章好水，根本不是总结......
