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

时间:2017-08-28 15:01:10

标签: javascript ecmascript-6 compiler-construction

Context free grammar定义了四个组成部分:

  
      
  • 一组非终端(V)......

  •   
  • 一组令牌,称为终端符号(Σ)......

  •   
  • 一组制作(P)......

  •   
  • 其中一个非终端被指定为起始符号(S);从   生产开始的地方。

  •   

The EcmaScript specification未提及起始符号,而是提及目标符号

  

从包含单个区分的句子开始   非终结,称为目标符号,给定的无上下文语法   指定一种语言,即(可能是无限的)可能的一组   可以重复产生的终端符号序列   用a的右边替换序列中的任何非终结符号   非终结者是左手边的生产。

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

  

有几种情况可以识别词汇输入   元素对语法语法上下文很敏感   消耗输入元素。这需要多个目标符号   词汇语法。

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

1 个答案:

答案 0 :(得分:3)

你所引用的只是CFG的一个定义 - 还有其他定义。例如,来自here

  

语法是4元组:

     
      
  1. 一组终端符号(即该语言的有效“字词”)。​​
  2.   
  3. 一组非终端符号(即该语言的“词性”)。
  4.   
  5. 一组称为制作的规则,可以将每个非终端转换为一系列终端。
  6.   
  7. 开始符号 目标符号 ,要生成的非终端(例如,英文: “句子”)。
  8.   

从我粗略的网络搜索中,似乎在讨论解析器时经常使用术语“目标符号”。我想这是因为有自下而上的解析器,例如LR-parsers,算法不会以目标符号开始。

顺便说一句,来自ECMAScript规范的特定段落似乎是从Java Language Specification完全复制的 - 所以你可以责怪他们: - )