decaf-lang / minidecaf-tutorial

The MiniDecaf tutorial documentation.
https://decaf-lang.github.io/minidecaf-tutorial/
93 stars 18 forks source link

对目前minidecaf-tutorial的建议 #2

Closed chyyuu closed 3 years ago

chyyuu commented 4 years ago

请各位助教今晚能够填写一下

MashPlant commented 4 years ago

《第一个编译器》一章中《仅一个 return 的 main 函数》这个部分还有很多就是翻译的部分,这个很明显就能读出来,而且我也感觉内容不是很合适。我觉得文档不应该分太多节(比如单独搞出来一个《任务》),这样读起来不舒服。 《[dzy] 仅一个 return 的 main 函数》这个部分写的看起来很舒服,我觉得应该只保留它,但是它包含一些specific的内容,比如ANTLR,所以我建议稍作修改后只保留它。

MashPlant commented 4 years ago

是否需要告诉学生,spec中的各个操作符的优先级和结合性是什么? 在我的代码中没有使用term,factor这样的东西,我是直接用优先级和结合性来解决冲突的。 本来符合人直觉的语法定义是这样的:

exp ::= exp + exp
exp ::= exp * exp
exp ::= int
+: 优先级1,左结合
*: 优先级2,左结合

(现在的文档中在刚刚引入这几个运算符的时候还是介绍了优先级和结合性的,但是后面添加更多运算符的时候就没有了) 但是现在我们的spec中只有将优先级和结合性转化翻译为产生式之后的结果,学生从这可能没法恢复出来原始的优先级和结合性了。而且lalr(1)文法下的优先级和结合性本来也不是靠翻译产生式来实现的,是靠消除多余的可能的动作来实现的。

dangerggg commented 4 years ago

目前GitBook中每个步骤的摘要和小结都是空的,并且语法分析部分只在步骤三提到了递归下降解析,我认为递归下降解析是否应该在一开始说明?

darknessnone commented 4 years ago

建议在“环境配置”加上安装qemu的教程

Hoblovski commented 4 years ago

递归下降解析应该作为单独可选的一讲。

我认为专门实现这递归下降意义不是很大……

我的意见: 每章公共部分只有

  1. 语法规范(以及很简单的词法规范),可能稍加一两句话的解释
  2. 语义规范
  3. 最重要的:背景知识。例如 5 的栈帧、7 的名称解析等。

专用部分可以有:

  1. 递归下降
  2. 背景知识的实现,例如用 符号表 还是 变量重命名 做命名解析

任务不应该作为单独的一章

汇编和 IR 一个表格足矣