首页 > 编程语言 >Java源代码解析-续篇-语法(块,语句和模式)

Java源代码解析-续篇-语法(块,语句和模式)

时间:2024-12-07 19:27:47浏览次数:5  
标签:语句 续篇 Java Block Statement 分隔符 源代码 Expression 表达式

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
Statement

Local Class Or Interface Declaration(局部类或接口声明) 由 Class Declaration(类声明),Normal Interface Declaration(普通接口声明)组成

ClassDeclaration
NormalInterfaceDeclaration

Local 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

原文部分截图如下:
块1
块2
块3
块4

例:

// 块
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
ForStatement

Statement 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
ForStatementNoShortIf

Statement 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
YieldStatement

Empty 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
ClassInstanceCreationExpression

If 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 -> ThrowStatement

Switch Block Statement Group(switch块语句组) 由 Switch Label(switch标签),:(操作符),Block Statements(块语句)组成

SwitchLabel : {SwitchLabel :} BlockStatements

Switch Label(switch标签) 由 Case Constant(case常量),default(默认分支关键字),,(分隔符),case(分支声明关键字)组成

case CaseConstant {, CaseConstant}
default

Case 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
EnhancedForStatement

For Statement No Short If(无简短if的for语句) 由 Basic For Statement No Short If(无简短if的基本for语句),Enhanced For Statement No Short If(无简短if的增强for语句)组成

BasicForStatementNoShortIf
EnhancedForStatementNoShortIf

Basic 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
LocalVariableDeclaration

For 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 )
Statement

Enhanced For Statement No Short If(无简短if的增强for语句) 由 Statement No Short If(无简短if的语句),Expression(表达式),for(循环关键字),((分隔符),)(分隔符),:(操作符),Local Variable Declaration(局部变量声明)组成

for ( LocalVariableDeclaration : Expression )
StatementNoShortIf

Break 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
TryWithResourcesStatement

Catches(捕获块) 由 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
VariableAccess

Variable Access(变量访问) 由 Field Access(字段访问),Expression Name(表达式名称)组成

ExpressionName
FieldAccess

Pattern(模式) 由 Type Pattern(类型模式)组成

TypePattern

Type Pattern(类型模式) 由 Local Variable Declaration(局部变量声明)组成

LocalVariableDeclaration

原文部分截图如下:
语句1
语句2
语句3
语句4
语句5
语句6
语句7
语句8
语句9
语句10
语句11
语句12
语句13
语句14

语句15
语句16
语句17
语句18
语句19

语句20
例:

// 语句
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
    ;

0 error(s) 0 warning(s)

暂告一段落

好了,至此描述了规范中第14章中的语法,较为详细的描述了Java中 Blocks(代码块)、Statements(语句),Patterns(模式)的语法结构,并给出了ANTLR4的g4文件部分实例。下一篇内容将是关于Java语法解析中的最后一篇,下一篇讲描述Java语法中最为复杂的 Expressions(表达式)语法。对本文有任何疑问或想要进一步探讨,私信,评论或邮箱:ElyarZakir@outlook.com

标签:语句,续篇,Java,Block,Statement,分隔符,源代码,Expression,表达式
From: https://blog.csdn.net/ElyarZakir/article/details/144310558

相关文章

  • JavaSwing JList
    try{BeautyEyeLNFHelper.frameBorderStyle=BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;//UIManager.put("RootPane.setupButtonVisible",false);org.jb2011.lnf.beautyeye.BeautyEyeLNFHelpe......
  • Spring Boot 从入门到精通:构建高效的 Java 应用
    摘要: 本文全面深入地介绍了SpringBoot框架,涵盖从入门基础到精通应用的各个层面。从SpringBoot的基本概念与特性出发,详细阐述其环境搭建过程、核心组件的使用方法,包括自动配置、起步依赖等。深入探讨数据访问层的构建,如与数据库的集成、使用MyBatis等持久化框架。在We......
  • 《Java核心技术I》死锁
    死锁账户1:200元账户2:300元线程1:从账号1转300到账户2线程2:从账户2转400到账户1如上,线程1和线程2显然都被阻塞,两个账户的余额都不足以转账,两个线程都无法执行下去。有可能会因为每一个线程要等待更多的钱款存入而导致所有线程都被阻塞,这样的状态称为死锁(deadlock)。通俗的......
  • 毕业设计-基于Java+SpringBoot+Vue校园墙小程序(源码+数据库+开题+项目说明+代码讲解)
    博主介绍:本人专注于java/前端/数据库/微信小程序技术领域的开发,以及五年的计算机毕业设计方面的实战开发经验和技术积累;本人也是多年的全栈开发人员;希望我发布的此篇文件可以帮助到您......
  • 毕业设计-基于Java+SpringBoot+Vue智慧校园小程序(源码+数据库+开题+项目说明+代码讲解
    博主介绍:本人专注于java/前端/数据库/微信小程序技术领域的开发,以及五年的计算机毕业设计方面的实战开发经验和技术积累;本人也是多年的全栈开发人员;希望我发布的此篇文件可以帮助到您......
  • 第二部分:基础知识 5.控制流 --[JavaScript 新手村:开启编程之旅的第一步]
    第二部分:基础知识5.控制流--[JavaScript新手村:开启编程之旅的第一步]JavaScript是一种广泛使用的编程语言,尤其在网页开发中。控制流(ControlFlow)是指程序执行的顺序。通过控制流语句,你可以控制代码按照特定的逻辑顺序执行,而不是从上到下依次执行每一行。1.条件语句:i......
  • 深入剖析 BitBake 源代码:架构、模块与 Yocto 项目的协同关系
    引言BitBake是Yocto项目的核心任务调度引擎,它通过对元数据的解析和任务依赖图的生成,为嵌入式Linux系统的构建提供了高效的支持。作为Yocto项目的执行核心,BitBake的代码设计逻辑清晰、功能模块划分明确。本文将结合实际代码,从BitBake的架构入手,分析其模块的功能与......
  • Java日志记录几种实现方案
    在平时使用到一些软件中,比如某宝或者某书,通过记录用户的行为来构建和分析用户的行为数据,同时也能更好优化产品设计和提升用户体验。比如在一个订单系统中,需要确定追踪用户的行为,比如:登录/登出浏览商品加购商品搜索商品关键字下单上述行为就需要使用到日志系统来存储或者记......
  • Java春招大厂面试题
    文章目录软件开发2024春招大厂面试题1.redis的跳表是怎么实现的?2.MVCC实现原理3.Redis怎么实现延时消息4.http默认端口号是多少5.http的几种请求(get、post…)有什么区别1.GET2.POST6.Http和Https的区别7.tcp协议中,三次握手四次挥手是怎样的1.什么是三次握手2.......
  • 蓝桥杯 2024 省赛 C++ B组 R 格式 (JAVA面向对象 高精度 纯api题解)
    解题思路:由于数位较大这里采用高精度,又因为高精度写起来比较麻烦所以这里直接采用JAVAapi中的高精度浮点数类型和高精度整数类型,应为高精度浮点数类型四舍五入较为麻烦所以这里改为手动四舍五入importjava.math.BigDecimal;importjava.math.BigInteger;importjava.util......