August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
我们是如何设计出这些表达式的文法规则呢?“经验”是最诚实的回答,我们的方法不过就是人们所习惯的书写表达式文法的方法。然而,写一个简单的文法还是有一些相当直接的方法的,我们需要知道:
1.如何区分文法规则和单词。
2.如何来排列文法规则(顺序)。
3.如何表达可选的模式(多选)。
4.如何表达重复的模式(重复)。
5.如何辨识出起始的文法规则。
不同的教材与不同的分析程序使用不同的符号约定和术语。例如,一些人习惯称单词为终结符(terminal),称规则为非终结符(non-terminal)或者产生式(production)。我们简单地将单词放在(双)引号中,与规则相区分。而文法第一条规则为默认的起始规则。一个规则的可选模式放在不同行中。例如:
因此,上面文法的含义是,一个Sequence是一个Element,或者是一个Element后面紧跟一个Sequence,并且两者以逗号隔开。一个Element是字母A或是字母B。List是在花括号中的一个Sequence。我们可以生成一些List(如何生成的?):
但下面这些不是List(为什么?):
上面的文法规则不是你在幼儿园中所学过的或是深深印在你脑海中的那些,但它们也并非什么高深的学问。参见7.4和7.8.1节的例子,可以看到我们是如何用文法表述语法思想的。 ...