Java语法中的修饰符问题

Java语法中的修饰符问题,java,parsing,grammar,parser-combinators,Java,Parsing,Grammar,Parser Combinators,Java定义了ModifiersOpt:{Modifier}修饰符定义为公共、受保护、私有、静态等中的一种{x}表示零次或多次出现x 我们知道,public不是有效的标识符。这是否意味着修改器列表的任何元素(例如公共)在{Modifier}中只出现一次?是否存在用于{Modifier}的“标准”解析器组合器?并非Java程序中的所有错误都是语法错误。例如,public-private之类的错误可能(正如您所发现的)被视为语义错误 作为另一个例子,我打赌语法也允许,例如 int i = "type

Java定义了
ModifiersOpt:{Modifier}
<代码>修饰符定义为
公共、受保护、私有、静态
等中的一种
{x}
表示零次或多次出现
x


我们知道,
public
不是有效的标识符。这是否意味着
修改器
列表的任何元素(例如
公共
)在
{Modifier}
中只出现一次?是否存在用于
{Modifier}
的“标准”解析器组合器?

并非Java程序中的所有错误都是语法错误。例如,
public-private
之类的错误可能(正如您所发现的)被视为语义错误

作为另一个例子,我打赌语法也允许,例如

int i = "type error";

尽管如此,它仍然不是一段有效的Java代码。

修饰符可以出现零次或多次。如上所述,虽然语法上可以接受,但例如,
public-private
在语义上是无效的。有很多小情况严格按照语法是可以的,但编译器不允许

下面的语法使用以下语法 BNF样式约定:

{x} 表示零次或多次出现 x

这实际上是有效的Java。(第一个
i
是一个字段。)