“目标符号”与上下文无关语法中的“开始符号”是否相同

Max*_*kyi 5 javascript compiler-construction ecmascript-6

上下文无关文法定义了四个组成部分:

  • 一组非终结符(V)...

  • 一组标记,称为终结符 (?)...

  • 一组制作(P)...

  • 非终结符之一被指定为开始符号(S);从哪里开始生产。

EcmaScript 规范没有提到开始符号,而是提到了目标符号

从一个由单个可区分的非终结符组成的句子开始,称为目标符号,给定的上下文无关文法指定了一种语言,即(可能是无限的)终结符号的可能序列集,这些序列可以通过重复替换目标符号中的任何非终结符而产生。具有产生式右侧的序列,其中非终结符是左侧。

根据这个定义,我大概可以得出结论,目标符号实际上只是开始符号的另一个名称,但goal symbol之所以使用该名称,是因为有不同的开始符号“类别”:

在几种情况下,词法输入元素的识别对消耗输入元素的句法文法上下文敏感。这需要词法文法的多个目标符号。

那么目标符号是 CFG 上下文中开始符号的另一个名称吗?

Ber*_*rgi 4

是的

您所引用的只是 CFG 的一种定义 - 还有其他定义。例如从这里

语法是 4 元组:

  1. 一组终结符号(即语言的有效“单词”)。
  2. 一组非终结符(即语言的“词性”)。
  3. 一组称为产生式的规则,可以将每个非终结符转换为终结符序列。
  4. 起始符号目标符号,要生成的非终结符(例如,英语中:“句子”)。

从我粗略的网络搜索来看,在讨论解析器时似乎更经常使用术语“目标符号”。我猜这是因为存在自下而上的解析器,例如LR 解析器,其中算法不以目标符号开头。

顺便说一句,ECMAScript 规范中的特定段落似乎是从Java 语言规范中逐字复制的- 所以你可以责怪它们:-)