Java源代码解析-续篇-语法(块,语句和模式)
目录
引言
Blocks(代码块)、Statements(语句),Patterns(模式)构成了Java程序逻辑与结构的核心要素,无论是编写简单的打印语句,还是构建复杂的逻辑判断与循环控制,都离不开对这三者的深刻理解和灵活运用,本篇内容将描述这三者在官方规范中定义的语法结构
规范中使用 { x } 的语法表示x可以出现零次或多次
规范中使用 [ x ] 的语法表示x可以出现零次或一次
Blocks(块)
规范中对块的定义:一个代码块是由花括号括起来的一系列语句、局部变量声明语句以及局部类和接口声明的集合
Block(块) 由 Block Statements(块语句),{(分隔符),}(分隔符)组成
{ [BlockStatements] }
Block Statements(块语句) 由 Block Statement(块语句)组成
BlockStatement {BlockStatement}
Block Statement(块语句) 由 Statement(语句),Local Class Or Interface Declaration(局部类或接口声明),Local Variable Declaration Statement(局部变量声明语句)组成
LocalClassOrInterfaceDeclaration
LocalVariableDeclarationStatement
StatementLocal Class Or Interface Declaration(局部类或接口声明) 由 Class Declaration(类声明),Normal Interface Declaration(普通接口声明)组成
ClassDeclaration
NormalInterfaceDeclarationLocal Variable Declaration Statement(局部变量声明语句) 由 ;(分隔符),Local Variable Declaration(局部变量声明)组成
LocalVariableDeclaration ;
Local Variable Declaration(局部变量声明) 由 Variable Modifier(变量修饰符),Variable Declarator List(变量声明符列表),Local Variable Type(局部变量类型)组成
{VariableModifier} LocalVariableType VariableDeclaratorList
Local Variable Type(局部变量类型) 由 Unann Type(未注解类型),var(局部变量类型推断关键字)组成
UnannType
var
原文部分截图如下:
例:
// 块
block:
LBRACE blockStatements? RBRACE
;
// 块语句
blockStatements:
blockStatement blockStatement*
;
// 块语句
blockStatement:
localClassOrInterfaceDeclaration
| localVariableDeclarationStatement
| statement
;
// 局部类或接口声明
localClassOrInterfaceDeclaration:
classDeclaration
| normalInterfaceDeclaration
;
// 局部变量声明
localVariableDeclaration:
variableModifier* localVariableType variableDeclaratorList?
;
// 局部变量类型
localVariableType:
unannType
| VAR
;
// 局部变量声明语句
localVariableDeclarationStatement:
localVariableDeclaration SEMI
;
Statements(语句)
官方规范中对 Statements(语句)的描述:在Java编程语言中,存在多种类型的语句。其中大多数与C和C++语言中的语句相对应,但也有一些是Java独有的
在任何编程语言源代码的解析过程中,对 Statements(语句)的准确处理是成功与否的关键
Statement(语句) 由 Labeled Statement(标签语句),Statement Without Trailing Substatement(无后续子语句的语句),If Then Else Statement(if-then-else语句),While Statement(while语句),For Statement(for语句),If Then Statement(if-then语句)组成
StatementWithoutTrailingSubstatement
LabeledStatement
IfThenStatement
IfThenElseStatement
WhileStatement
ForStatementStatement No Short If(无简短if的语句) 由 While Statement No Short If(无简短if的while语句),Statement Without Trailing Substatement(无后续子语句的语句),Labeled Statement No Short If(无简短if的标签语句),If Then Else Statement No Short If(无简短if的if-then-else语句),For Statement No Short If(无简短if的for语句)组成
StatementWithoutTrailingSubstatement
LabeledStatementNoShortIf
IfThenElseStatementNoShortIf
WhileStatementNoShortIf
ForStatementNoShortIfStatement Without Trailing Substatement(无后续子语句的语句) 由 Yield Statement(yield语句),Do Statement(do-while语句),Empty Statement(空语句),Synchronized Statement(同步语句),Break Statement(break语句),Switch Statement(switch语句),Try Statement(try语句),Expression Statement(表达式语句),Assert Statement(断言语句),Return Statement(返回语句),Block(块),Throw Statement(抛出语句),Continue Statement(continue语句)组成
Block
EmptyStatement
ExpressionStatement
AssertStatement
SwitchStatement
DoStatement
BreakStatement
ContinueStatement
ReturnStatement
SynchronizedStatement
ThrowStatement
TryStatement
YieldStatementEmpty Statement(空语句) 由 ;(分隔符)组成
;
Labeled Statement(标签语句) 由 Identifier(标识符),Statement(语句),:(操作符)组成
Identifier : Statement
Labeled Statement No Short If(无简短if的标签语句) 由 Identifier(标识符),Statement No Short If(无简短if的语句),:(操作符)组成
Identifier : StatementNoShortIf
Expression Statement(表达式语句) 由 Statement Expression(语句表达式),;(分隔符)组成
StatementExpression ;
Statement Expression(语句表达式) 由 Assignment(赋值),Post Increment Expression(后增表达式),Pre Decrement Expression(前减表达式),Pre Increment Expression(前增表达式),Post Decrement Expression(后减表达式),Method Invocation(方法调用),Class Instance Creation Expression(类实例创建表达式)组成
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpressionIf Then Statement(if-then语句) 由 Expression(表达式),Statement(语句),((分隔符),)(分隔符),if(条件语句关键字)组成
if ( Expression ) Statement
If Then Else Statement(if-then-else语句) 由 Statement No Short If(无简短if的语句),Expression(表达式),else(分支关键字),Statement(语句),((分隔符),)(分隔符),if(条件语句关键字)组成
if ( Expression ) StatementNoShortIf else Statement
If Then Else Statement No Short If(无简短if的if-then-else语句) 由 Statement No Short If(无简短if的语句),Expression(表达式),else(分支关键字),((分隔符),)(分隔符),if(条件语句关键字)组成
if ( Expression ) StatementNoShortIf else StatementNoShortIf
Assert Statement(断言语句) 由 Expression(表达式),assert(断言关键字),:(操作符),;(分隔符)组成
assert Expression ;
assert Expression : Expression ;Switch Statement(switch语句) 由 Switch Block(switch块),Expression(表达式),((分隔符),)(分隔符),switch(分支语句关键字)组成
switch ( Expression ) SwitchBlock
Switch Block(switch块) 由 Switch Label(switch标签),Switch Block Statement Group(switch块语句组),:(操作符),{(分隔符),Switch Rule(switch规则),}(分隔符)组成
{ SwitchRule {SwitchRule} }
{ {SwitchBlockStatementGroup} {SwitchLabel :} }Switch Rule(switch规则) 由 Switch Label(switch标签),->(箭头符号),Expression(表达式),Block(块),;(分隔符),Throw Statement(抛出语句)组成
SwitchLabel -> Expression ;
SwitchLabel -> Block
SwitchLabel -> ThrowStatementSwitch Block Statement Group(switch块语句组) 由 Switch Label(switch标签),:(操作符),Block Statements(块语句)组成
SwitchLabel : {SwitchLabel :} BlockStatements
Switch Label(switch标签) 由 Case Constant(case常量),default(默认分支关键字),,(分隔符),case(分支声明关键字)组成
case CaseConstant {, CaseConstant}
defaultCase Constant(case常量) 由 Conditional Expression(条件表达式)组成
ConditionalExpression
While Statement(while语句) 由 Expression(表达式),Statement(语句),((分隔符),)(分隔符),while(循环关键字)组成
while ( Expression ) Statement
While Statement No Short If(无简短if的while语句) 由 Statement No Short If(无简短if的语句),Expression(表达式),((分隔符),)(分隔符),while(循环关键字)组成
while ( Expression ) StatementNoShortIf
Do Statement(do-while语句) 由 Expression(表达式),Statement(语句),((分隔符),)(分隔符),do(循环关键字),;(分隔符),while(循环关键字)组成
do Statement while ( Expression ) ;
For Statement(for语句) 由 Basic For Statement(基本for语句),Enhanced For Statement(增强for语句)组成
BasicForStatement
EnhancedForStatementFor Statement No Short If(无简短if的for语句) 由 Basic For Statement No Short If(无简短if的基本for语句),Enhanced For Statement No Short If(无简短if的增强for语句)组成
BasicForStatementNoShortIf
EnhancedForStatementNoShortIfBasic For Statement(基本for语句) 由 Expression(表达式),For Update(for更新),Statement(语句),for(循环关键字),((分隔符),)(分隔符),;(分隔符),For Init(for初始化)组成
for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement
Basic For Statement No Short If(无简短if的基本for语句) 由 Statement No Short If(无简短if的语句),Expression(表达式),For Update(for更新),for(循环关键字),((分隔符),)(分隔符),;(分隔符),For Init(for初始化)组成
for ( [ForInit] ; [Expression] ; [ForUpdate] ) StatementNoShortIf
For Init(for初始化) 由 Statement Expression List(语句表达式列表),Local Variable Declaration(局部变量声明)组成
StatementExpressionList
LocalVariableDeclarationFor Update(for更新) 由 Statement Expression List(语句表达式列表)组成
StatementExpressionList
Statement Expression List(语句表达式列表) 由 Statement Expression(语句表达式),,(分隔符)组成
StatementExpression {, StatementExpression}
Enhanced For Statement(增强for语句) 由 Expression(表达式),Statement(语句),for(循环关键字),((分隔符),)(分隔符),:(操作符),Local Variable Declaration(局部变量声明)组成
for ( LocalVariableDeclaration : Expression )
StatementEnhanced For Statement No Short If(无简短if的增强for语句) 由 Statement No Short If(无简短if的语句),Expression(表达式),for(循环关键字),((分隔符),)(分隔符),:(操作符),Local Variable Declaration(局部变量声明)组成
for ( LocalVariableDeclaration : Expression )
StatementNoShortIfBreak Statement(break语句) 由 Identifier(标识符),break(跳出关键字),;(分隔符)组成
break [Identifier] ;
Yield Statement(yield语句) 由 Expression(表达式),yield(分支返回关键字),;(分隔符)组成
yield Expression ;
Continue Statement(continue语句) 由 Identifier(标识符),continue(跳转关键字),;(分隔符)组成
continue [Identifier] ;
Return Statement(返回语句) 由 Expression(表达式),;(分隔符),return(返回关键字)组成
return [Expression] ;
Throw Statement(抛出语句) 由 throw(抛出异常关键字),Expression(表达式),;(分隔符)组成
throw Expression ;
Synchronized Statement(同步语句) 由 synchronized(代码块同步执行关键字),Expression(表达式),((分隔符),)(分隔符),Block(块)组成
synchronized ( Expression ) Block
Try Statement(try语句) 由 Try With Resources Statement(带资源的try语句),Catches(捕获块),Block(块),try(异常处理关键字),Finally(finally块)组成
try Block Catches
try Block [Catches] Finally
TryWithResourcesStatementCatches(捕获块) 由 Catch Clause(捕获子句)组成
CatchClause {CatchClause}
Catch Clause(捕获子句) 由 ((分隔符),)(分隔符),Block(块),catch(捕获异常关键字),Catch Formal Parameter(捕获形式参数)组成
catch ( CatchFormalParameter ) Block
Catch Formal Parameter(捕获形式参数) 由 Variable Declarator Id(变量声明符标识符),Variable Modifier(变量修饰符),Catch Type(捕获类型)组成
{VariableModifier} CatchType VariableDeclaratorId
Catch Type(捕获类型) 由 Unann Class Type(未注解类类型),|(操作符),Class Type(类类型)组成
UnannClassType {| ClassType}
Finally(finally块) 由 finally(最终代码块关键字),Block(块)组成
finally Block
Try With Resources Statement(带资源的try语句) 由 Catches(捕获块),Block(块),try(异常处理关键字),Resource Specification(资源规范),Finally(finally块)组成
try ResourceSpecification Block [Catches] [Finally]
Resource Specification(资源规范) 由 Resource List(资源列表),((分隔符),)(分隔符),;(分隔符)组成
( ResourceList [;] )
Resource List(资源列表) 由 Resource(资源),;(分隔符)组成
Resource {; Resource}
Resource(资源) 由 Variable Access(变量访问),Local Variable Declaration(局部变量声明)组成
LocalVariableDeclaration
VariableAccessVariable Access(变量访问) 由 Field Access(字段访问),Expression Name(表达式名称)组成
ExpressionName
FieldAccessPattern(模式) 由 Type Pattern(类型模式)组成
TypePattern
Type Pattern(类型模式) 由 Local Variable Declaration(局部变量声明)组成
LocalVariableDeclaration
原文部分截图如下:
例:
// 语句
statement:
statementWithoutTrailingSubstatement
| labeledStatement
| ifThenStatement
| ifThenElseStatement
| whileStatement
| forStatement
;
// 无简短if的语句
statementNoShortIf:
statementWithoutTrailingSubstatement
| labeledStatementNoShortIf
| ifThenElseStatementNoShortIf
| whileStatementNoShortIf
| forStatementNoShortIf
;
//无后续子语句的语句
statementWithoutTrailingSubstatement:
block
| emptyStatement_
| expressionStatement
| assertStatement
| switchStatement
| doStatement
| breakStatement
| continueStatement
| returnStatement
| synchronizedStatement
| throwStatement
| tryStatement
| yieldStatement
;
// 空语句
emptyStatement_:
SEMI
;
// 标签语句
labeledStatement:
identifier COLON statement
;
// 无简短if的标签语句
labeledStatementNoShortIf:
identifier COLON statementNoShortIf
;
// 表达式语句
expressionStatement:
statementExpression SEMI
;
// 语句表达式
statementExpression:
assignment
| preIncrementExpression
| preDecrementExpression
| postIncrementExpression
| postDecrementExpression
| methodInvocation
| classInstanceCreationExpression
;
// if-then语句
ifThenStatement:
IF LPAREN expression RPAREN statement
;
// if-then-else语句
ifThenElseStatement:
IF LPAREN expression RPAREN statementNoShortIf ELSE statement
;
// 无简短if的if-then-else语句
ifThenElseStatementNoShortIf:
IF LPAREN expression RPAREN statementNoShortIf ELSE statementNoShortIf
;
//断言语句
assertStatement:
ASSERT expression (COLON expression)? SEMI
;
// switch语句
switchStatement:
SWITCH LPAREN expression RPAREN switchBlock
;
// switch块
switchBlock:
LBRACE switchRule switchRule* RBRACE
| LBRACE switchBlockStatementGroup* ( switchLabel COLON)* RBRACE
;
// switch规则
switchRule:
switchLabel ARROW (expression SEMI | block | throwStatement)
;
// switch块语句组
switchBlockStatementGroup:
switchLabel COLON (switchLabel COLON)* blockStatements
;
// switch标签
switchLabel:
CASE caseConstant (COMMA caseConstant)*
| DEFAULT
;
// case常量
caseConstant:
conditionalExpression
;
// while语句
whileStatement:
WHILE LPAREN expression RPAREN statement
;
// 无简短if的while语句
whileStatementNoShortIf:
WHILE LPAREN expression RPAREN statementNoShortIf
;
// do-while语句
doStatement:
DO statement WHILE LPAREN expression RPAREN SEMI
;
// for语句
forStatement:
basicForStatement
| enhancedForStatement
;
// 无简短if的for语句
forStatementNoShortIf:
basicForStatementNoShortIf
| enhancedForStatementNoShortIf
;
// 基本for语句
basicForStatement:
FOR LPAREN forInit? SEMI expression? SEMI forUpdate? RPAREN statement
;
// 无简短if的基本for语句
basicForStatementNoShortIf:
FOR LPAREN forInit? SEMI expression? SEMI forUpdate? RPAREN statementNoShortIf
;
// for初始化
forInit:
statementExpressionList
| localVariableDeclaration
;
// for更新
forUpdate:
statementExpressionList
;
// 语句表达式列表
statementExpressionList:
statementExpression (COMMA statementExpression)*
;
// 增强for语句
enhancedForStatement:
FOR LPAREN localVariableDeclaration COLON expression RPAREN statement
;
// 无简短if的增强for语句
enhancedForStatementNoShortIf:
FOR LPAREN localVariableDeclaration COLON expression RPAREN statementNoShortIf
;
// break语句
breakStatement:
BREAK identifier? SEMI
;
// yield语句
yieldStatement:
YIELD expression SEMI
;
// continue语句
continueStatement:
CONTINUE identifier? SEMI
;
// 返回语句
returnStatement:
RETURN expression? SEMI
;
// 抛出语句
throwStatement:
THROW expression SEMI
;
// 同步语句
synchronizedStatement:
SYNCHRONIZED LPAREN expression RPAREN block
;
// try语句
tryStatement:
TRY block catches
| TRY block finallyBlock
| TRY block catches? finallyBlock
| tryWithResourcesStatement
;
// 捕获块
catches:
catchClause catchClause*
;
// 捕获块
catchClause:
CATCH LPAREN catchFormalParameter RPAREN block
;
// 捕获形式参数
catchFormalParameter:
variableModifier* catchType variableDeclaratorId
;
// 捕获类型
catchType:
unannClassType (BITOR classType)*
;
// finally块
finallyBlock:
FINALLY block
;
// 带资源的try语句
tryWithResourcesStatement:
TRY resourceSpecification block catches? finallyBlock?
;
// 资源规范
resourceSpecification:
LPAREN resourceList SEMI? RPAREN
;
//资源列表
resourceList:
resource (SEMI resource)*
;
// 资源
resource:
localVariableDeclaration
| variableAccess
;
// 变量访问
variableAccess:
expressionName
| fieldAccess
;
Patterns(模式)
官方规范中对 Patterns(语句)的描述:模式描述了一种可以对值执行的测试,模式作为语句和表达式的操作数出现,提供要测试的值,模式还可以声明局部变量,这些变量被称为模式变量
其实就是局部变量声明
Pattern(模式) 由 Type Pattern(类型模式)组成
TypePattern
Type Pattern(类型模式) 由 Local Variable Declaration(局部变量声明)组成
LocalVariableDeclaration
原文部分截图如下:
例:
// 模式
pattern:
typePattern
;
// 类型模式
typePattern:
localVariableDeclaration
;
暂告一段落
标签:语句,续篇,Java,Block,Statement,分隔符,源代码,Expression,表达式 From: https://blog.csdn.net/ElyarZakir/article/details/144310558好了,至此描述了规范中第14章中的语法,较为详细的描述了Java中 Blocks(代码块)、Statements(语句),Patterns(模式)的语法结构,并给出了ANTLR4的g4文件部分实例。下一篇内容将是关于Java语法解析中的最后一篇,下一篇讲描述Java语法中最为复杂的 Expressions(表达式)语法。对本文有任何疑问或想要进一步探讨,私信,评论或邮箱:ElyarZakir@outlook.com