我怎样才能用 BNF 写一个句子?

How can I write a sentence in BNF?

用 BNF 写句子的语法是什么?它的结构或正确性并不重要。我只关心它是否有1个或多个单词,可以用空格分隔也可以不用空格分隔,可以包含也可以不包含符号或数字。

What is the syntax for writing a sentence in BNF?

Backus-Naur 格式 (BNF) 不是像 JSON 或 PDF 那样的数据格式,它是对定义给定格式的语法的描述。你不会用 BNF 写一个句子,但你可能会用 BNF 来描述一个句子。该描述可能会列举句子中可接受的字符,告诉您单词由非白色 space 字符组成,句子是由 space 分隔并以句子结尾的单词序列-终止标点符号。当然,对于像英语这样的自然语言中什么构成有效句子有很多规则,所以如果你沿着这条路走下去,你可能还需要为 subject-phrase、[=12= 之类的东西创建实体], object-phrase, 等等

一个完整的用BNF表达的英语文法肯定是极其复杂的。 BNF 更适合计算机语言和格式的语法。例如,您可能有 JSON 的 BNF 描述,或者 C 或 Java.

中允许的语法

I only care whether it has 1 or more words, which may or may not be separated by spaces, and which may or may not contain symbols or numbers.

BNF 的规则在 the Wikipedia page 等地方可用。同样,你不会用 BNF 写一个特定的句子,但你会说出一个句子的允许范围。所以你可能有这样的规则:

<char> ::= "A" | "B" | "C" | "D" ...
<word> ::= <char>*
<terminator> ::= "." | "!" | "?"
<phrase> ::= <word> | <word> " " <phrase>
<sentence> ::= <phrase> <terminator>

每条规则都是根据其他规则构建的,或者有时是递归构建的...例如phrase 的规则说一个词组是一个词或一个词加上一个 space 加上一个词组,所以你可以有任意数量的 space 分隔的词。