Java 8 CFG中无法访问的规则?

mar*_*man 1 java parsing context-free-grammar formal-languages java-8

也许是一个相当深入的问题,但是有人知道为什么会这样

Java语言规范 - Java SE 8 Edition(2014-03-03)

它根据生产规则和终端定义了Java 8的正式无上下文语法,并不是所有已定义的规则都可以访问?

规范描述了许多规则,如

IfThenStatement:
if(Expression)Statement

要么

AssertStatement:
断言表达式;
断言表达式:表达;

这一切都很有意义.

但奇怪的是,一些定义的规则是其他人无法达到的,例如重要的规则

类型:
PrimitiveType
ReferenceType

总的来说,我计算了以下两条规则:其他人无法访问的规则:

  1. 包裹名字
  2. 类型

如何定义具有无法访问规则的完整Java 8 CFG?

C. *_*een 6

规范作者通常会发现根据非终端制定规范的规则很方便; 然而,有时候,由于技术原因,一些有用的非终端不会用在主语法中.在这种情况下,规范有时会定义相关的非终端,以解决语法形式主义中规范的一些规则.

例如,在这里,Type的规则发送一个非常明确的信号,即所有类型都是基本类型或引用类型.但是语法有许多地方只能引用基本类型,而其他地方需要引用类型.如果Type不可访问,则不一定意味着语法语法不完整; 它可能只意味着实际上语法语法中没有地方作者认为引用Type是有用的.如果规范作者发现它是一个有用的展示工具,那么可以定义非终端类型.

在出现在多个版本中的规范中,有时会出现另一个原因:非终端不再在主语法中使用,但给出了适当的定义以避免破坏任何涉及该非终端的其他规范,并且允许那些其他规范优雅地升级到包含语法的新版本的规范.

我不知道这些原因中哪些适用于Java 8中的这些非终端,或者是否存在其他原因.