Graduation Project——编译器初想

序言

我的毕设是做一个编译器类型的音乐游戏,基于SSM架构。由于前端制作水平和美术功底的限制,我只能靠着别人的网页模版来制作。
现在前端大致已经制作的差不多,后端框架和环境已经搭好。万事俱备,只欠东风——核心算法。
关于核心算法,之前也想了很多,但是万事都要踏踏实实的来做,所以我打算从本篇序言开始整理自己的思路。
首先编译器类型的游戏,并不真正意味着要制作一个编译器,也许只需要文法、语法、语义识别,可能之后会用到java反射进行链接(通过用户的输入,我进行翻译,写为java然后或许能通过反射运行以及调用前端)。说不定思考到后期,写一个新的语言出来(支持中文也说不定啊)。
这个序言也是为了以后的论文做的准备,俗话说得好:

万事开头难,然后中间难,最后结尾难。

嗯,编译原理课程以前也接触过,也自己写过文法、语法检查。不过完整的一套流程并没有走过,也需要好好探索。

编译器的模块化工程

为什么要将编译器生成一个个阶段、一个个模块呢?原因是更加容易设计和减少冗余。正如OSI七层模型,多么精美的架构啊。而编译器的模块划分的越清晰,工作就越简单。譬如,词法分析阶段将输入的字符流转为token流,就大大减少了语法分析阶段需要判断的输入种类,在简化设计的同时还可以提高性能。此外模块化还将编译器各个阶段的工作尽量独立展开,而不会重新设计系统。

编译器的阶段:

  • 词法分析–>产生token,可用于语法高亮。
  • 语法分析–>产生抽象语法树,可用于语法高亮、代码格式化、代码折叠。
  • 语义分析–>产生带类型信息和符号表的抽象语法树,可用于重命名、重构、代码自动生成、代码自动改写。
  • 数据流分析–>产生控制流图、冲突图,可用于编辑后继续运行(Edit and Continue)。

用途当然不止于此,这些只是编译器的一般用途,对于具体的应用,还有更多用途,等待着去发掘。

语言

我们将要设计的语言命名为Stone语言,为什么取这个名呢,因为我参考了一个叫两周自制脚本语言的书籍,不知道书籍怎么样,我们拭目以待。实现该开发语言的是java,因此Stone语言也是一种运行于java虚拟机的语言。

为什么要叫Stone呢,因为它的灵感来自Ruby和Perl语言的叫法,因为这个语言太过简陋,不能称之为宝石,所以叫它石头。
在这里插入图片描述
我们将根据这一个流程来设计语言。下一章,我们将决定Stone语言具备哪些语法功能来适应我们的程序。

猜你喜欢

转载自blog.csdn.net/No_Game_No_Life_/article/details/84390992
今日推荐