本章描述了此规范中使用的上下文无关的语法,用于定义程序的词法和语法结构。
上下文无关的语法由一组产品组成。每个产品都有一个作为其左手边的称为非终结符的抽象符号,并有一个作为其右手边的一个或多个非终结符和终结符号的序列。对于每个语法,终结符号都提取自特定的字母表。
从一个由单个被称为目标符号的非终结符组成的句子开始,一个给定的上下文无关的语法指定一种语言,即,一个可能的终结符号序列,其终结符号可能产生自重复地用一个非终结符是左手边的产品的右手边替换序列中的任何非终结符。
Java编程语言的词法在 3(Lexical Structure) 中给出。此语法具有作为其终结符的 Unicode 字符集字符。它定义了一组产品,从目标符号输入(3.5)开始,其描述了如何将 Unicode 字符(3.1)序列转换为输入元素(3.5)序列。
这些丢弃空白(3.6)和注释(3.7)后的输入元素形成了 Java 编程语言的句法的终端符号,并被称为记号(3.5)。这些记号是 Java 编程语言的标识符(3.8)、关键字(3.9)、字面量(3.10)、分隔符(3.11)和运算符(3.12)。
Java编程语言的句法在 4、6-10、14 和 15 章给出。此语法具有由词法定义的记号作为其终端符号。它定义了一组产品,从目标符号编译单元(7.3)开始,其描述了记号序列如何形成句法上正确的程序。
为了方便,句法全部在 19 章提供。
词法和句法的产品中的终端符号显示为固定宽度的字体,并贯穿此规范,无论何时文本直接引用此类终端符号。
非终端符号以斜体显示。
一个产生式右手边的语法 {x} 表示 x 出现零或多次。
例如,
ArgumentList :
Argument {, Argument}
表示一个 Argument,其后跟零或多次出现的一个逗号和一个 Argument,它们组成了 ArgumentList。结果是一个 ArgumentList 可能包含任意正数个 arguments。
一个产生式右手边的语法 [x] 表示 x 出现零或一次。即,x 是一个可选的符号。