@@ -255,7 +255,13 @@ variableDeclarator
255255 ;
256256
257257variableDeclaratorId
258- : identifier (' [' ' ]' )*
258+ : (identifier | UNDERSCORE ) (' [' ' ]' )*
259+ ;
260+
261+ // Java 22+ (preview, continued into later releases): unnamed variables / patterns
262+ variableName
263+ : identifier
264+ | UNDERSCORE
259265 ;
260266
261267variableInitializer
@@ -310,7 +316,7 @@ lambdaLVTIList
310316 ;
311317
312318lambdaLVTIParameter
313- : variableModifier* VAR identifier
319+ : variableModifier* VAR ( identifier | UNDERSCORE )
314320 ;
315321
316322qualifiedName
@@ -474,7 +480,7 @@ blockStatement
474480 ;
475481
476482localVariableDeclaration
477- : variableModifier* (VAR identifier ' =' expression | typeType variableDeclarators)
483+ : variableModifier* (VAR ( identifier | UNDERSCORE ) ' =' expression | typeType variableDeclarators)
478484 ;
479485
480486identifier
@@ -539,7 +545,7 @@ statement
539545 ;
540546
541547catchClause
542- : CATCH ' (' variableModifier* catchType identifier ' )' block
548+ : CATCH ' (' variableModifier* catchType ( identifier | UNDERSCORE ) ' )' block
543549 ;
544550
545551catchType
@@ -559,7 +565,7 @@ resources
559565 ;
560566
561567resource
562- : variableModifier* (classOrInterfaceType variableDeclaratorId | VAR identifier) ' =' expression
568+ : variableModifier* (classOrInterfaceType variableDeclaratorId | VAR ( identifier | UNDERSCORE ) ) ' =' expression
563569 | qualifiedName
564570 ;
565571
@@ -574,7 +580,7 @@ switchLabel
574580 : CASE (
575581 constantExpression = expression
576582 | enumConstantName = IDENTIFIER
577- | typeType varName = identifier
583+ | typeType varName = variableName
578584 )
579585 | DEFAULT
580586 ;
@@ -697,8 +703,9 @@ lambdaExpression
697703
698704lambdaParameters
699705 : identifier
706+ | UNDERSCORE
700707 | ' (' formalParameterList? ' )'
701- | ' (' identifier (' ,' identifier)* ' )'
708+ | ' (' ( identifier | UNDERSCORE ) (' ,' ( identifier | UNDERSCORE ) )* ' )'
702709 | ' (' lambdaLVTIList? ' )'
703710 ;
704711
0 commit comments