Context free grammar定义了四个组成部分:
一组非终端(V)......
一组令牌,称为终端符号(Σ)......
一组制作(P)......
其中一个非终端被指定为起始符号(S);从 生产开始的地方。
The EcmaScript specification未提及起始符号,而是提及目标符号:
从包含单个区分的句子开始 非终结,称为目标符号,给定的无上下文语法 指定一种语言,即(可能是无限的)可能的一组 可以重复产生的终端符号序列 用a的右边替换序列中的任何非终结符号 非终结者是左手边的生产。
根据这个定义,我可以得出结论目标符号实际上只是起始符号的另一个名称,但使用goal symbol
名称是因为有不同的起始符号“categories”:
有几种情况可以识别词汇输入 元素对语法语法上下文很敏感 消耗输入元素。这需要多个目标符号 词汇语法。
目标符号是CFG上下文中起始符号的另一个名称吗?
答案 0 :(得分:3)
你所引用的只是CFG的一个定义 - 还有其他定义。例如,来自here:
语法是4元组:
- 一组终端符号(即该语言的有效“字词”)。
- 一组非终端符号(即该语言的“词性”)。
- 一组称为制作的规则,可以将每个非终端转换为一系列终端。
- 开始符号 或目标符号 ,要生成的非终端(例如,英文: “句子”)。
醇>
从我粗略的网络搜索中,似乎在讨论解析器时经常使用术语“目标符号”。我想这是因为有自下而上的解析器,例如LR-parsers,算法不会以目标符号开始。
顺便说一句,来自ECMAScript规范的特定段落似乎是从Java Language Specification完全复制的 - 所以你可以责怪他们: - )