![]() |
1
5
Emacs CC模式手册: Indentation Engine Basics . js2-mode: a new JavaScript mode for Emacs . 引用后者的话:“令人惊讶的是,令人惊讶的是,反直觉的是,缩进问题是 解析和语法验证。” |
![]() |
2
3
你要找的神奇搜索词可能是“ pretty print |
![]() |
3
2
像另一个回应者一样,正确处理这个问题的关键是预打印, 也就是说,从代码的抽象语法结构生成文本。 基本上你利用树的筑巢来产生筑巢 打印文本的。关键思想是从树的叶子构建原始字符串,从子树的其他框中将水平框[文本的矩形]粘在一起以提供水平组合,并将框彼此粘在一起以获得更大的垂直框。 棘手的部分:用来自树叶的格式化信息重新生成langauge文本(二进制浮点数有多少前导零?), 通过允许可选的框布局和回溯,以及模式匹配复杂的树结构以良好的方式预打印特定的树来处理右边距溢出(例如,嵌套的if-then-if-then-if…) a research paper 关于这个话题 (Full text PDF) . 这是 what we did for prettyprinting 与 DMS Software Reengineering Toolkit 预打印大规模元编程生成的AST。 |
![]() |
4
1
here . 所以,我恐怕在技术上无法提供答案,因为我没有找到任何学术论文,但作为一种元答案(遗憾的是,以问题的形式):这比解析语言难吗?我用“难”这个词的含糊的可计算性/复杂性意义,而不是指一个人实际投入的实际时间/努力/眼泪。 website ),不能用“缩进信息”来装饰解析树吗? 我想我只是不明白学术论文的要求是什么。除非,当然,有什么我遗漏了。这是很可能的,因为我从来不敢尝试。:)但是,从我的角度来看,这种智能缩进似乎只需运行一个修改过的解析器就可以实现,并且它不会报告“解析错误”,而是自动重新格式化代码,使其有效(假设“真正的”解析器已经确定块)。实时运行肯定会引起问题,并且依赖于空白的语言中存在模糊的缩进级别(作为缩进级别 街区的尽头)。 作为期末考试(说实话,我差不多完了!:))注意:根据我的经验,Emacs文本编辑非常好。我不知道它是怎么工作的,但如果我尝试这个,那将是我第一次看到。。。之后,当然。:)) |
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |