Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Jeff Higgins Newsgroups: comp.lang.java.programmer Subject: Re: [LONG POST] Re: Parser Date: Sun, 27 Apr 2014 20:00:49 -0400 Organization: A noiseless patient Spider Lines: 806 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Mon, 28 Apr 2014 00:01:52 +0000 (UTC) Injection-Info: mx05.eternal-september.org; posting-host="6b9e92482af47766954d85fb77d372f5"; logging-data="13707"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19M/jKzvdpDIu4XHXxXQRgjMOcE5WpjcgQ=" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Icedove/24.4.0 In-Reply-To: Cancel-Lock: sha1:uCSsHuw0gUTKmyUU80dsB5v75jM= Xref: csiph.com comp.lang.java.programmer:28287 On 04/27/2014 07:59 PM, Jeff Higgins wrote: The JavaŽ Language Specification Java SE 8 Edition Chapter 19. Syntax Identifier: IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral IdentifierChars: JavaLetter {JavaLetterOrDigit} JavaLetter: any Unicode character that is a "Java letter" JavaLetterOrDigit: any Unicode character that is a "Java letter-or-digit" Literal: IntegerLiteral FloatingPointLiteral BooleanLiteral CharacterLiteral StringLiteral NullLiteral Type: PrimitiveType ReferenceType PrimitiveType: {Annotation} NumericType {Annotation} |boolean| NumericType: IntegralType FloatingPointType IntegralType: |byte| |short| |int| |long| |char| FloatingPointType: |float| |double| ReferenceType: ClassOrInterfaceType TypeVariable ArrayType ClassOrInterfaceType: ClassType InterfaceType ClassType: {Annotation} Identifier [TypeArguments] ClassOrInterfaceType |.| {Annotation} Identifier [TypeArguments] InterfaceType: ClassType TypeVariable: {Annotation} Identifier ArrayType: PrimitiveType Dims ClassOrInterfaceType Dims TypeVariable Dims Dims: {Annotation} |[| |]| {{Annotation} |[| |]|} TypeParameter: {TypeParameterModifier} Identifier [TypeBound] TypeBound: |extends| TypeVariable |extends| ClassOrInterfaceType {AdditionalBound} AdditionalBound: |&| InterfaceType TypeArguments: |<| TypeArgumentList |>| TypeArgumentList: TypeArgument {|,| TypeArgument} TypeArgument: ReferenceType Wildcard Wildcard: {Annotation} |?| [WildcardBounds] WildcardBounds: |extends| ReferenceType |super| ReferenceType CompilationUnit: [PackageDeclaration] {ImportDeclaration} {TypeDeclaration} PackageDeclaration: {PackageModifier} |package| Identifier {|.| Identifier} |;| PackageModifier: Annotation ImportDeclaration: SingleTypeImportDeclaration TypeImportOnDemandDeclaration SingleStaticImportDeclaration StaticImportOnDemandDeclaration SingleTypeImportDeclaration: |import| TypeName |;| TypeImportOnDemandDeclaration: |import| PackageOrTypeName |.| |*| |;| SingleStaticImportDeclaration: |import| |static| TypeName |.| Identifier |;| StaticImportOnDemandDeclaration: |import| |static| TypeName |.| |*| |;| TypeDeclaration: ClassDeclaration InterfaceDeclaration |;| ClassDeclaration: NormalClassDeclaration EnumDeclaration NormalClassDeclaration: {ClassModifier} |class| Identifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody ClassModifier: Annotation |public| |protected| |private| |abstract| |static| |final| |strictfp| TypeParameters: |<| TypeParameterList |>| TypeParameterList: TypeParameter {|,| TypeParameter} Superclass: |extends| ClassType Superinterfaces: |implements| InterfaceTypeList InterfaceTypeList: InterfaceType {|,| InterfaceType} ClassBody: |{| {ClassBodyDeclaration} |}| ClassBodyDeclaration: ClassMemberDeclaration InstanceInitializer StaticInitializer ConstructorDeclaration ClassMemberDeclaration: FieldDeclaration MethodDeclaration ClassDeclaration InterfaceDeclaration |;| FieldDeclaration: {FieldModifier} UnannType VariableDeclaratorList |;| FieldModifier: Annotation |public| |protected| |private| |static| |final| |transient| |volatile| VariableDeclaratorList: VariableDeclarator {|,| VariableDeclarator} VariableDeclarator: VariableDeclaratorId [|=| VariableInitializer] VariableDeclaratorId: Identifier [Dims] VariableInitializer: Expression ArrayInitializer UnannType: UnannPrimitiveType UnannReferenceType UnannPrimitiveType: NumericType |boolean| UnannReferenceType: UnannClassOrInterfaceType UnannTypeVariable UnannArrayType UnannClassOrInterfaceType: UnannClassType UnannInterfaceType UnannClassType: Identifier [TypeArguments] UnannClassOrInterfaceType |.| {Annotation} Identifier [TypeArguments] UnannInterfaceType: UnannClassType UnannTypeVariable: Identifier UnannArrayType: UnannPrimitiveType Dims UnannClassOrInterfaceType Dims UnannTypeVariable Dims MethodDeclaration: {MethodModifier} MethodHeader MethodBody MethodModifier: Annotation |public| |protected| |private| |abstract| |static| |final| |synchronized| |native| |strictfp| MethodHeader: Result MethodDeclarator [Throws] TypeParameters {Annotation} Result MethodDeclarator [Throws] Result: UnannType |void| MethodDeclarator: Identifier |(| [FormalParameterList] |)| [Dims] FormalParameterList: FormalParameters |,| LastFormalParameter LastFormalParameter FormalParameters: FormalParameter {|,| FormalParameter} ReceiverParameter {|,| FormalParameter} FormalParameter: {VariableModifier} UnannType VariableDeclaratorId VariableModifier: Annotation |final| LastFormalParameter: {VariableModifier} UnannType {Annotation} |...| VariableDeclaratorId FormalParameter ReceiverParameter: {Annotation} UnannType [Identifier |.|] |this| Throws: |throws| ExceptionTypeList ExceptionTypeList: ExceptionType {|,| ExceptionType} ExceptionType: ClassType TypeVariable MethodBody: Block |;| InstanceInitializer: Block StaticInitializer: |static| Block ConstructorDeclaration: {ConstructorModifier} ConstructorDeclarator [Throws] ConstructorBody ConstructorModifier: Annotation |public| |protected| |private| ConstructorDeclarator: [TypeParameters] SimpleTypeName |(| [FormalParameterList] |)| ConstructorBody: |{| [ExplicitConstructorInvocation] [BlockStatements] |}| ExplicitConstructorInvocation: [TypeArguments] |this| |(| [ArgumentList] |)| |;| [TypeArguments] |super| |(| [ArgumentList] |)| |;| ExpressionName |.| [TypeArguments] |super| |(| [ArgumentList] |)| |;| Primary |.| [TypeArguments] |super| |(| [ArgumentList] |)| |;| EnumDeclaration: {ClassModifier} |enum| Identifier [Superinterfaces] EnumBody EnumBody: |{| [EnumConstantList] [|,|] [EnumBodyDeclarations] |}| EnumConstantList: EnumConstant {|,| EnumConstant} EnumConstant: {EnumConstantModifier} Identifier [|(| [ArgumentList] |)|] [ClassBody] EnumConstantModifier: Annotation EnumBodyDeclarations: |;| {ClassBodyDeclaration} InterfaceDeclaration: NormalInterfaceDeclaration AnnotationTypeDeclaration NormalInterfaceDeclaration: {InterfaceModifier} |interface| Identifier [TypeParameters] [ExtendsInterfaces] InterfaceBody InterfaceModifier: Annotation |public| |protected| |private| |abstract| |static| |strictfp| ExtendsInterfaces: |extends| InterfaceTypeList InterfaceBody: |{| {InterfaceMemberDeclaration} |}| InterfaceMemberDeclaration: ConstantDeclaration InterfaceMethodDeclaration ClassDeclaration InterfaceDeclaration |;| ConstantDeclaration: {ConstantModifier} UnannType VariableDeclaratorList |;| ConstantModifier: Annotation |public| |static| |final| InterfaceMethodDeclaration: {InterfaceMethodModifier} MethodHeader MethodBody InterfaceMethodModifier: Annotation |public| |abstract| |default| |static| |strictfp| AnnotationTypeDeclaration: {InterfaceModifier} |@| |interface| Identifier AnnotationTypeBody AnnotationTypeBody: |{| {AnnotationTypeMemberDeclaration} |}| AnnotationTypeMemberDeclaration: AnnotationTypeElementDeclaration ConstantDeclaration ClassDeclaration InterfaceDeclaration |;| AnnotationTypeElementDeclaration: {AnnotationTypeElementModifier} UnannType Identifier |(| |)| [Dims] [DefaultValue] |;| AnnotationTypeElementModifier: Annotation |public| |abstract| DefaultValue: |default| ElementValue Annotation: NormalAnnotation MarkerAnnotation SingleElementAnnotation NormalAnnotation: |@| TypeName |(| [ElementValuePairList] |)| ElementValuePairList: ElementValuePair {|,| ElementValuePair} ElementValuePair: Identifier |=| ElementValue ElementValue: ConditionalExpression ElementValueArrayInitializer Annotation ElementValueArrayInitializer: |{| [ElementValueList] [|,|] |}| ElementValueList: ElementValue {|,| ElementValue} MarkerAnnotation: |@| TypeName SingleElementAnnotation: |@| TypeName |(| ElementValue |)| ArrayInitializer: |{| [VariableInitializerList] [|,|] |}| VariableInitializerList: VariableInitializer {|,| VariableInitializer} Block: |{| [BlockStatements] |}| BlockStatements: BlockStatement {BlockStatement} BlockStatement: LocalVariableDeclarationStatement ClassDeclaration Statement LocalVariableDeclarationStatement: LocalVariableDeclaration |;| LocalVariableDeclaration: {VariableModifier} UnannType VariableDeclaratorList Statement: StatementWithoutTrailingSubstatement LabeledStatement IfThenStatement IfThenElseStatement WhileStatement ForStatement StatementNoShortIf: StatementWithoutTrailingSubstatement LabeledStatementNoShortIf IfThenElseStatementNoShortIf WhileStatementNoShortIf ForStatementNoShortIf StatementWithoutTrailingSubstatement: Block EmptyStatement ExpressionStatement AssertStatement SwitchStatement DoStatement BreakStatement ContinueStatement ReturnStatement SynchronizedStatement ThrowStatement TryStatement EmptyStatement: |;| LabeledStatement: Identifier |:| Statement LabeledStatementNoShortIf: Identifier |:| StatementNoShortIf ExpressionStatement: StatementExpression |;| StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression IfThenStatement: |if| |(| Expression |)| Statement IfThenElseStatement: |if| |(| Expression |)| StatementNoShortIf |else| Statement IfThenElseStatementNoShortIf: |if| |(| Expression |)| StatementNoShortIf |else| StatementNoShortIf AssertStatement: |assert| Expression |;| |assert| Expression |:| Expression |;| SwitchStatement: |switch| |(| Expression |)| SwitchBlock SwitchBlock: |{| {SwitchBlockStatementGroup} {SwitchLabel} |}| SwitchBlockStatementGroup: SwitchLabels BlockStatements SwitchLabels: SwitchLabel {SwitchLabel} SwitchLabel: |case| ConstantExpression |:| |case| EnumConstantName |:| |default| |:| EnumConstantName: Identifier WhileStatement: |while| |(| Expression |)| Statement WhileStatementNoShortIf: |while| |(| Expression |)| StatementNoShortIf DoStatement: |do| Statement |while| |(| Expression |)| |;| ForStatement: BasicForStatement EnhancedForStatement ForStatementNoShortIf: BasicForStatementNoShortIf EnhancedForStatementNoShortIf BasicForStatement: |for| |(| [ForInit] |;| [Expression] |;| [ForUpdate] |)| Statement BasicForStatementNoShortIf: |for| |(| [ForInit] |;| [Expression] |;| [ForUpdate] |)| StatementNoShortIf ForInit: StatementExpressionList LocalVariableDeclaration ForUpdate: StatementExpressionList StatementExpressionList: StatementExpression {|,| StatementExpression} EnhancedForStatement: |for| |(| {VariableModifier} UnannType VariableDeclaratorId |:| Expression |)| Statement EnhancedForStatementNoShortIf: |for| |(| {VariableModifier} UnannType VariableDeclaratorId |:| Expression |)| StatementNoShortIf BreakStatement: |break| [Identifier] |;| ContinueStatement: |continue| [Identifier] |;| ReturnStatement: |return| [Expression] |;| ThrowStatement: |throw| Expression |;| SynchronizedStatement: |synchronized| |(| Expression |)| Block TryStatement: |try| Block Catches |try| Block [Catches] Finally TryWithResourcesStatement Catches: CatchClause {CatchClause} CatchClause: |catch| |(| CatchFormalParameter |)| Block CatchFormalParameter: {VariableModifier} CatchType VariableDeclaratorId CatchType: UnannClassType {||| ClassType} Finally: |finally| Block TryWithResourcesStatement: |try| ResourceSpecification Block [Catches] [Finally] ResourceSpecification: |(| ResourceList [|;|] |)| ResourceList: Resource {|;| Resource} Resource: {VariableModifier} UnannType VariableDeclaratorId |=| Expression Primary: PrimaryNoNewArray ArrayCreationExpression PrimaryNoNewArray: Literal TypeName {|[| |]|} |.| |class| |void| |.| |class| |this| TypeName |.| |this| |(| Expression |)| ClassInstanceCreationExpression FieldAccess ArrayAccess MethodInvocation MethodReference ClassInstanceCreationExpression: |new| [TypeArguments] {Annotation} Identifier [TypeArgumentsOrDiamond] |(| [ArgumentList] |)| [ClassBody] ExpressionName |.| |new| [TypeArguments] {Annotation} Identifier [TypeArgumentsOrDiamond] |(| [ArgumentList] |)| [ClassBody] Primary |.| |new| [TypeArguments] {Annotation} Identifier [TypeArgumentsOrDiamond] |(| [ArgumentList] |)| [ClassBody] TypeArgumentsOrDiamond: TypeArguments |<>| FieldAccess: Primary |.| Identifier |super| |.| Identifier TypeName |.| |super| |.| Identifier ArrayAccess: ExpressionName |[| Expression |]| PrimaryNoNewArray |[| Expression |]| MethodInvocation: MethodName |(| [ArgumentList] |)| TypeName |.| [TypeArguments] Identifier |(| [ArgumentList] |)| ExpressionName |.| [TypeArguments] Identifier |(| [ArgumentList] |)| Primary |.| [TypeArguments] Identifier |(| [ArgumentList] |)| |super| |.| [TypeArguments] Identifier |(| [ArgumentList] |)| TypeName |.| |super| |.| [TypeArguments] Identifier |(| [ArgumentList] |)| ArgumentList: Expression {|,| Expression} MethodReference: ExpressionName |::| [TypeArguments] Identifier ReferenceType |::| [TypeArguments] Identifier Primary |::| [TypeArguments] Identifier |super| |::| [TypeArguments] Identifier TypeName |.| |super| |::| [TypeArguments] Identifier ClassType |::| [TypeArguments] |new| ArrayType |::| |new| ArrayCreationExpression: |new| PrimitiveType DimExprs [Dims] |new| ClassOrInterfaceType DimExprs [Dims] |new| PrimitiveType Dims ArrayInitializer |new| ClassOrInterfaceType Dims ArrayInitializer DimExprs: DimExpr {DimExpr} DimExpr: {Annotation} |[| Expression |]| ConstantExpression: Expression Expression: LambdaExpression AssignmentExpression LambdaExpression: LambdaParameters |->| LambdaBody LambdaParameters: Identifier |(| [FormalParameterList] |)| |(| InferredFormalParameterList |)| InferredFormalParameterList: Identifier {|,| Identifier} LambdaBody: Expression Block AssignmentExpression: ConditionalExpression Assignment Assignment: LeftHandSide AssignmentOperator Expression LeftHandSide: ExpressionName FieldAccess ArrayAccess AssignmentOperator: |=| |*=| |/=| |%=| |+=| |-=| |<<=| |>>=| |>>>=| |&=| |^=| ||=| ConditionalExpression: ConditionalOrExpression ConditionalOrExpression |?| Expression |:| ConditionalExpression ConditionalOrExpression: ConditionalAndExpression ConditionalOrExpression |||| ConditionalAndExpression ConditionalAndExpression: InclusiveOrExpression ConditionalAndExpression |&&| InclusiveOrExpression InclusiveOrExpression: ExclusiveOrExpression InclusiveOrExpression ||| ExclusiveOrExpression ExclusiveOrExpression: AndExpression ExclusiveOrExpression |^| AndExpression AndExpression: EqualityExpression AndExpression |&| EqualityExpression EqualityExpression: RelationalExpression EqualityExpression |==| RelationalExpression EqualityExpression |!=| RelationalExpression RelationalExpression: ShiftExpression RelationalExpression |<| ShiftExpression RelationalExpression |>| ShiftExpression RelationalExpression |<=| ShiftExpression RelationalExpression |>=| ShiftExpression RelationalExpression |instanceof| ReferenceType ShiftExpression: AdditiveExpression ShiftExpression |<<| AdditiveExpression ShiftExpression |>>| AdditiveExpression ShiftExpression |>>>| AdditiveExpression AdditiveExpression: MultiplicativeExpression AdditiveExpression |+| MultiplicativeExpression AdditiveExpression |-| MultiplicativeExpression MultiplicativeExpression: UnaryExpression MultiplicativeExpression |*| UnaryExpression MultiplicativeExpression |/| UnaryExpression MultiplicativeExpression |%| UnaryExpression UnaryExpression: PreIncrementExpression PreDecrementExpression |+| UnaryExpression |-| UnaryExpression UnaryExpressionNotPlusMinus PreIncrementExpression: |++| UnaryExpression PreDecrementExpression: |--| UnaryExpression UnaryExpressionNotPlusMinus: PostfixExpression |~| UnaryExpression |!| UnaryExpression CastExpression PostfixExpression: Primary ExpressionName PostIncrementExpression PostDecrementExpression PostIncrementExpression: PostfixExpression |++| PostDecrementExpression: PostfixExpression |--| CastExpression: |(| PrimitiveType |)| UnaryExpression |(| ReferenceType {AdditionalBound} |)| UnaryExpressionNotPlusMinus |(| ReferenceType {AdditionalBound} |)| LambdaExpression