Welcome

欢迎使用"言”

什么是"言”?

  • 对于学生,言是一个编译器框架,它将帮助学生通过少量代码,编写一个很的编译器&解释器 -> Yan Foundation

  • 对于老师,言是一个编译原理课程作业的评测平台。使用Yan Foudation编写的编译器可以通过我们的一个在线评测平台进行评测,判断实现是否正确,并给出错误报告。-> Online Judge System

为什么要使用它?

当你在编写你的第一个编译器的时候,你可能会想“为什么我写的编译器和我常用的Java,C,Python的编译器&解释器那么不一样呢?。

  • 我要怎么样写出像Javac,GCC那样可以在命令行配置选项,指定输入输出的编译器?,又或者我要怎么样才能写出像Python那样的可以实时运行,支持历史记录等功能的交互式解释器?
  • 在完成你的编译原理课程作业时,你可能还要输出中间结果到XML,JSON,亦或是其他某种格式。不熟悉Java的你可能又发愁了,我要怎么样才能输出成那样呢?
  • 我要怎么用才能…

通过言编译器框架,上述功能的实现都将变得极其简单。

事实上,实现第一点,你只需要编写两行代码,实现第二点,你甚至不需要编写代码

你不需要花费大量的时间在这些与编译原理其实关系不大的地方,你需要做的只是编写各种分析的核心逻辑,例如词法分析的nextToken函数,语法分析的parse函数。


想要体验一下?-> 快速开始

在编译原理的教学过程中,也许你想要让每个学生都实现一个编译器作为练习,让学生把理论应用到实践中去。但是问题是,面对几十甚至几百位学生的编译器实现,后期的批改可能成为你的一大负担,甚至一项不可能完成的任务,而这些问题的根源主要就是有以下几点:

  1. 学生编写编译器的目标语言可能五花八门。
  2. 学生提交的程序/代码很难运行起来,甚至无法运行。
  3. 学生输出的结果格式不一,很难判断学生写的代码是否正确。
  4. 学生人数众多,逐一批改不太现实。

“言”项目的诞生就是为了解决上述问题。

你可以通过约束学生实现指定一种语言解决问题1,然后使用我们的框架解决其他问题。
  • 使用我们的编译器框架(Yan foundation)编写的编译器保证可以通过一个标准编译执行过程进行运行(解决2);
  • 利用编译器框架提供的代码生成工具,你可以提前生成好你指定语言的词法单词的类型定义(一些int常量),语法树的结构定义(一些java类),学生编写词法分析器,语法分析器等编译器阶段的时候,创建好预先定义好的类的对象,即可通过编译器框架获得统一的输出样式(解决3)。
  • 基于这些统一的输出文件和我们,我们提供一个在线评测平台可以将学生的输出与标准编译器的输出进行比较判分,并提供一个评测报告。

总结来说

使用我们的框架定制编译原理实践需要以下三步:

  • 选取一种语言,指定规范。
  • 根据规范,使用我们提供的工具生成词法单词类型和语法树的数据结构定义。
  • 完成这种语言的标准实现(如果你要自动评测的话)。

如果你不想或没有时间定制,你也可以使用我们定制好的C语言实验框架。


定制你自己的实验框架?-> 框架定制

使用我们编写好的一个C语言实验框架?-> YCC框架