5.1 语法和词法文法
这一节描述了本规范中使用的上下文无关文法,这是 ECMAScript 程序语法结构的定义。
5.1.1 上下文无关文法(Context-Free Grammars)
一个上下文无关文法由许多产生式(productions)组 成。每个产生式都拥有一个抽象符号作为其左式(left-hand side),被称为非终结 符(nonterminal),以及一个由零个或多个非终结符和终结符(terminal)组 成的右式(right-hand side)。对于每个文法而言,终结符是从一个特定的字母表中抽取的。
句子的开始由单个显式的非终结符组成,被称为目标符(goal symbol),一个给定的上 下文无关文法规定了这样一种语言,它被表示为可能的终结符序列组成的集合(有可能是无限集),这是用产生式左式重 复替换序列中一切非终结符得到的,替换时所用的产生式的左式要和被替换的非终结符一致。
5.1.2 词法文法和正则表达式文法
ECMAScript 的词法文法(lexical grammar)在条款
为 ECMAScript 语法文法提供的除空白和注释之外的输入元素被称为 ECMAScript 托肯 (token)。这些托肯即 ECMAScript 语言中的保留字、标识符、常量和标点符号。此外,行结束符即使不被认为是托肯,它同样是输入的元素流中的一部分,并指导自动插入分号的过程 (
ECMAScript 的正则表达式文法(RegExp grammar)在
词法文法和正则表达式文法的产生式被识别为被两个冒号"::"分割的产生式。词法文法和正则表达式文法共享某些产生式。
5.1.3 数字化字符串文法
第二个文法被用于将字符串翻译为数值量。此文法类似词法文法中与数字常量有关的部分, 以 Unicode 字符集中的字符作为其终结符。此文法在
5.1.4 语法文法
ECMAScript 的语法文法在条款
若将一个 Unicode 字符流被解析为一个 ECMAScript 程序,首先,通过重复应用词法文法,它被转化为一个输入元素流;通过一次应用语法文法,这个输入元素流继续被解析。如果输入元素流中已不再留有托肯,而托肯仍无法被解析为单个目标非终结符 Program,则这个程序语法出错。
语法文法的产生式被识别为仅被一个冒号":"分割的产生式。
语 法文法被表示为0,0,0的分段,0其实不是能被正确的 ECMAScript 程序接受的托肯序列中的一员。确定的额外托肯序列同样会被接受,也就是说,即使只有冒号被加入序列中的某个位置(比如在行结束字符之前),这些托肯也会被 文法所描述。深入说来,即便终结字符出现在某些“尴尬”的位置上,被文法描述的、确定的托肯序列也不考虑其是否能被接受。
//全文太长,先发的这部分是说明部分
//最后一段没看懂,晕
1 comment:
5.1.4节最后一段首句被认为是原文出错,现译为"语法文法在章节11,12,13,14中体现,它事实上不是能被正确的 ECMAScript 程序接受的托肯序列中的一员。"
Post a Comment