记法约定

最新更新: 2019-08-23 10:06:33 阅读: 107次

1、  上下文无关文法(Context-Free Grammars)

  一个上下文无关文法由许多产生式(productions)组成。每个产生式都拥有一个抽象符号作为其左式   (left-hand side),被称为非终结符(nonterminal),以及一个由零个或多个非终结符和终结符(terminal)组成的右式(right-hand side)。对于每个文法而言,终结符是从一个特定的字符表中抽取的。

  句子的开始由单个显式的非终结符组成,被称为目标符(goal symbol),一个给定的上下文无关文法规定了这样一种语言,它被表示为可能的终结符序列组成的集合(有可能是无限集)。这是用产生式左式重复替换序列中一切非终结符得到的,替换时所用的产生式的左式要和被替换的非终结符一致。

2、法文法和正则表达式文法

  ECMAScript 的词法文法(lexical grammar)在条款7中 给出。此文法 以 Unicode 字符集中的字符作为其终结符,定义了一个产式集合,其中的产生式以目标符输入分隔元素 (InputElementDiv)或输入正则表达式元素(InputElementRegExp)开 始,这描述了 Unicode 字符是
如何被翻译成输入元素序列的。
  为 ECMAScript 语法文法提供的除空白和注释之外的输入元素被称为 ECMAScript 托肯 (token)。这些托肯即 ECMAScript 语言中的保留字、标识符、常量和标点符号。此外,行结束符即使不被认为是托肯,它同样是输入的元素流中的一部分,并指导自动插入分号的过程 (7.8.5)。普通的空白和单行注释被丢弃,且不出现在为语法文法提供的输入元素流中。对于多 行注释 (MultiLineComment)(即形如 "/*...*/"的注释,不论它跨越了多少行),如果它没有包含行结束符,就被简单地丢弃;假使多行释包含一 个以上行结束符,则用单个行结束符替换它,使之成为为语法文法提供的输入元素流的一部分。
  ECMAScript  的正则表达式文法(RegExp grammar)在15.10 中给出。此文法同样 以 Unicode 字符集中的字符作为其终结符,定义了一个产生式集合,其中的产生式以目标符的模式(Pattern)为 起始,描述了 Unicode 字符是如何被翻译成正则表达式模式的。
    词法文法和正则表达式文法的产生式被识别为被两个冒号"::"分割的产生式。词法文法和正则表达式文法共享某些产生式。

   它定义了一套产生式,从目标符 InputElementDiv 或 InputElementRegExp 起始,描述了如何将这样的字符序列翻译成一个输入元素序列。

   空白和注释之外的输入元素构成 ECMAScript 语法文法的终结符,它们被称为 ECMAScript 的 tokens。这些 tokens 是,ECMAScript 语言的保留字,标识符,字面量,标点符号。此外,行结束符虽然不被视为 tokens,但会成为输入元素流的一部分,用于引导处理自动插入分号( 7.9 )。空白和单行注释会被简单的丢弃,不会出现在语法文法的输入元素的流中。如果一个 多行注释 (MultiLineComment)(即形式为“/ ... /”的注释,不管是否跨越多行)不包含行结束符也会简单地丢弃,但如果一个 多行注释 包含一个或多个结束符,那么,注释会被替换为一个行结束符,成为语法文法输入元素流的一部分。

  两个冒号“::”作为分隔符分割词法和正则的文法产生式。词法和正则的文法共享某些产生式。


3  数字化字符串文法

第二个文法被用于将字符串翻译为数值量。此文法类似词法文法中与数字常量有关的部分,以 Unicode 字符集中的字符作为其终结符。此文法在9.3.1中出现。数字化字符串文法的产生式被识 别为被三个冒号":::"分割的产生式。

4  语法文法

  ECMAScript 的语法文法在条款11,12,13和14中 给出。此文法以词法文法定义的 ECMAScript 托肯作为其终结符(5.1.2),定义了一个产生式 集合,其中的产生式以目标符 Program 开始,描述了托肯序列是如何构成语法正确的 ECMAScript 程序的。若将一个 Unicode 字符流被解析为一个 ECMAScript 程序,首先,通过重复应用词法文法,它被转化为一个输入元素流;通过一次应用语法文法,这个输入元素流继续被解析。如果输元素流中已不再留有托肯,而托 肯仍无法被解析为单个目标非终结符 Program,则这个程序语法出 错。
  语法文法的产生式被识别为仅被一个冒号":"分割的产生式。
  语法文法在章节11,12,13,14中 体现①,它事实上不是能被正确的 ECMAScript 程序接受的托肯序列中的一员。一个确定的额外托肯序列同样会被接受,也就是说,即使只有冒号被加入序列中的某个位置(比如在行结束字符之前),这些托肯也 会被 文法所描述。深入说来,即便终结字符出现在某些“尴尬”的位置上,被文法描述的、确定的托肯序列也不考虑其是否 
能被接受。

5  文法记法

词法和字符串文法的终结符,以及有些语法文法的终结符,将以等宽(fixed width)字 体显示在文法的 产生式中,贯穿本规范中该文本被直接引用为一个终结符 的全过程。它们可出现在写成的程序中。所有的非终结字符以这种特定的方式,作为恰当的、ASCII 范围内的 Unicode 字符被识别,以区别其它 Unicode 范围内看上去相似的 Unicode 字符。

  非终结符以斜体(italic)显示。非终结符的定义由其被定义的名字后跟一个或更多冒号引入 (冒 号的数量指出产生式所属的文法)。非终结符中一个或多个可变的右式紧跟在下一行。例如,文法语法的定义

With语句 :
 with ( 表达 式 ) 语句
这说明非终结符With语句表示 with 托肯,后跟一个左括号托肯,再跟随一个表达式,其后是一个右括号托肯,再后面是一个语句。 出现的表达式和语句它们自身都是非终结符。作为


6、JSON 文法

 JSON 文法用于将描述 ECMAScript 对象的字符串转换为实际的对象。15.12.1 给出了 JSON 文法 。

 JSON 文法由 JSON 词法文法和 JSON 语法文法组成。JSON 词法文法用于将字符序列转换为 tokens,类似 ECMAScript 词法文法。JSON 语法文法说明 JSON 词法文法给出怎样的 tokens 序列才能转换为语法上是正确的 JSON 对象。

 两个冒号“::”作为分隔符分割 JSON 词法文法的产生式。JSON 词法文法使用某些 ECMAScript 词法文法的产生式。JSON 语法文法与 ECMAScript 语法文法类似。JSON 语法文法产生式被一个冒号“:”作为分隔符分割。