语言与文风2020rust-analyzer.github.io
Ungrammar:不合语法
Ungrammar
导读
rust-analyzer 团队介绍他们设计的一种极简语法记号 Ungrammar:用最少的符号描述语法树的结构,再由它生成解析器和语法树代码。对写作者来说,它示范了一件事:怎样用一套小而稳定的记号,把复杂结构讲到别人能照着复现;以及怎样通过分层隐藏细节,让主干清晰。
可以直接用的写作要点
- 01
先约定一套最小记号,再描述结构:Ungrammar 只用几条规则就撑起整套语法,写复杂内容时也可先给出简化的符号约定,读者理解起来会轻松很多。
- 02
把繁杂的分支收进一个概括层:Ungrammar 用“辅助符号”把递归压平成列表,写作中同样可以先归纳再展开,避免主干被细节淹掉。
- 03
区分“该让读者看见的”和“可以隐去的”:只保留必要的节点,其余放进背景,叙述才有层次。
- 04
检验结构描述是否清楚,最好的办法是照着它写出一个最小例子(比如 Hello, World!);能生成例子,才算真的讲明白了。
HN 评论精选
把符号分成隐藏、辅助、可见三层,细节就能按需折叠,递归也会被压平成列表。
很有意思。我最近几天在做一件很相关的事:从语法(就是实际用来解析的那份语法)生成 Swift 的语法树数据结构。我发现很有用的做法是把符号分成隐藏、辅助、可见三类:隐藏符号不出现在树里,可见符号正常出现,辅助符号则只让它的子节点进入语法树。目前效果很好。这样如果递归符号是辅助符号,左递归还是右递归都无所谓,因为它最终会被压平成一个列表。因此我可以在语法里用正则表达式,按常规方式通过辅助符号脱糖成上下文无关规则,并为它生成合理的语法树。
auggierose查看英文原文
Very interesting. I am actually working for a few days now on something very related: Generate syntax tree data structures (in Swift) from a grammar (which is the actual grammar used for parsing). What I found very useful is to distinguish between hidden, auxiliary and visible symbols. Hidden symbols don't appear in the tree, visible symbols appear as normal, and for auxiliary symbols only their children appear in the syntax tree. Seems to work very nicely so far. This way, left oder right recursion for example doesn't matter if your recursion symbol is auxiliary, because it will just be flattened into a list anyway. Therefore I can use regular expressions in a grammar by desugaring them via auxiliary symbols in the usual way via context-free rules, and have a sensible syntax tree generated for that.
结构描述的最终检验,是照它生成一个可运行的最小示例。
能不能拿一份扩展 BNF 和一批标准非终结符名(stat、funcname 之类),直接生成一个 Hello, World! 示例?只靠扩展 BNF 就能生成出一门编程语言的样子,那会非常酷。
andrewmcwatters查看英文原文
Is it possible to take some extended BNF and standard nonterminal names (stat, funcname, etc.) then output some Hello, World! example from it? It would be really cool to just generate the look and feel of a programming language just using extended BNF.
这种“从语法生成数据结构”的做法早有先例(ASDL),Python 至今仍在沿用。
这不就是当年 Zephyr 项目的 ASDL 做的事吗?(附论文链接)我记得 Python 现在还在用它。
pfdietz查看英文原文
Wasn't this what ASDL did, way back from the Zephyr project? https://www.cs.princeton.edu/research/techreps/TR-554-97 I think Python is still using this.
同类还值得读
像说话一样写作
Write like you talk
这篇短文主张写作应像说话一样自然、清晰,避免装腔作势的书面腔。
语言与文风2015 · 647 分 · 272 评4 条写作要点编辑精选法律语言难懂源于写作不佳,而非专业概念
Poor writing, not specialized concepts, drives difficulty with legal language
这是一项认知科学研究:法律文本难懂,主要不是因为充斥专业术语,而是因为写作者把句子写得又长又绕、修饰语层层嵌套、回指距离过远。
语言与文风2022 · 559 分 · 322 评5 条写作要点编辑精选写得简单
Write Simply
保罗·格拉汉姆在这篇短文里主张:好文章应该写得简单——用日常词汇、短句、直白的结构,不为显得聪明而堆砌复杂表达。
语言与文风2021 · 484 分 · 330 评4 条写作要点编辑精选Tortured phrases:科学写作中出现的一种可疑文风
Tortured phrases: A dubious writing style emerging in science
《自然》新闻报道了一种在科学论文中蔓延的怪现象:原本标准的术语被同义替换软件改写成了古怪说法,比如把 "cloud computing" 写成 "haze figuring"。
语言与文风2021 · 329 分 · 256 评4 条写作要点编辑精选乔治·奥威尔 1940 年对《我的奋斗》的书评
George Orwell's review of Mein Kampf (1940)
这是奥威尔1940年对《我的奋斗》的书评。
语言与文风2014 · 305 分 · 240 评4 条写作要点编辑精选