返回
用解析的语言:理解 ECMAScript 规范
前端
2024-02-28 10:03:05
ECMAScript,它不是 JavaScript,然而却是 JavaScript 的基础,了解 JavaScript 就必须先弄懂 ECMAScript。想要深度理解 ECMAScript,就必须从它的规范入手。
ECMAScript 规范使用上下文无关文法(CFG)来定义语言,如果你还不熟悉,强烈建议在继续阅读本文之前先补习一下相关知识。规范中定义了四种文法:
- 词法文法:如何将 Unicode 码点(code points)转换为词法标记(lexical tokens)。
- 语法文法:定义了如何将词法标记组合成语法结构。
- 语义文法:规定了语法结构的含义。
- 模块文法:了如何将模块组合成更大的应用程序。
本文将重点介绍语法文法,因为它是理解 ECMAScript 规范的核心。
语法文法是一个递归文法,这意味着它引用了自己。这允许语言产生嵌套结构,例如函数调用和对象嵌套。文法由一系列产生式组成,每个产生式都有一个左部和一个右部。左部是一个非终结符,它表示语言中的一个语法结构。右部是一个符号序列,它可以是非终结符、终结符或两者兼有。
例如,以下是定义函数声明的产生式:
FunctionDeclaration :
"function" Identifier "(" FormalParameterList? ")" "{" FunctionBody "}"
在这个产生式中,FunctionDeclaration
是左部,它表示一个函数声明。右部由几个符号组成:
"function"
是一个终结符,表示function
。Identifier
是一个非终结符,它表示函数名称。"("
和")"
是终结符,表示圆括号。FormalParameterList
是一个可选的非终结符,它表示函数的参数列表。"{
和}"
是终结符,表示花括号。FunctionBody
是一个非终结符,它表示函数的主体。
这个产生式告诉我们,一个函数声明由关键字 function
、函数名称、可选的参数列表、花括号包围的函数主体组成。
通过使用产生式的递归应用,我们可以生成任意复杂的语法结构。这使得 ECMAScript 规范能够定义一门功能强大且表达丰富的语言。
理解 ECMAScript 规范的语法文法是理解 ECMAScript 语言的关键。如果你正在学习 ECMAScript,或者只是想加深对它的理解,我强烈建议你花时间研究规范。