Presentation on theme: "EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则"— Presentation transcript:

EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则

假定有语法类 表示一般表达式, 表示可用于 switch 标号的静态表达式 查阅 javascript语言的规范,尽可能保证你的描述反映了javascript语言规范的要求 请说明javascript程序的哪些结构要求没有在你的描述中反映出来?如果有,请说明为什么无法描述。

语句 ::= block |

| | | | | | | | | |

2.语句块 block ::= ‘{’[]'}' statement-list ::= {} 3.变量声明 variable-statement ::= 'var '[';'] variable-declaration-list ::= {','} variable-declaration ::= ['='] 4.赋值语句 assignment-statement ::= ' =' [';']

5.带标签语句 label-statement ::= : | 'case' : | 'default : ' 6.表达式语句 expression-statement ::= 7.条件语句 condition-statement ::= 'if ( ' ') ' | 'if ( '' ) ' 'else ' | 'switch ( ' ') ' 8.循环语句 iteration-statement ::= 'while ( ' ') ' | 'do' 'while (' ')' [';'] | 'for ( '[ ' =' ]';'[]';' {] ')'

9.跳转语句 jump-statement ::= 'continue '[';']' | 'break' [][';'] | 'return' [][';'] 10.with语句 with-statement ::= with '('')' 11.异常语句 exception-statement ::= 'try' 'catch' '(' ')' ['finally'] 12.throw语句 throw-statement::= 'throw'[;] 12.空语句 empty-statement ::=';'

操作语义 1.赋值语句 2.if语句 3.while语句

4.do-while语句 5.for语句 初始化: 判断循环条件:

6.continue语句(跳过循环体的后部分)

7.break语句(跳出循环体) 8.return语句

9.with语句 10.异常语句 11.空语句

堆栈帧存储与参数机制 2. 画出以下程序运行过程的堆栈存储状态 class A {

2. 画出以下程序运行过程的堆栈存储状态 class A { public static void main(String[] args) String str1="aaa"; String str2="bbb"; method1(str1,str2); System.out.println(str1+"\t"+str2); StringBuffer sb1=new StringBuffer("aaa"); StringBuffer sb2=new StringBuffer("bbb"); method2(sb1,sb2); System.out.println(sb1+"\t"+sb2); } static void method1(String str1,String str2) str1+="ccc";str2="aaa"; static void method2(StringBuffer sb1,StringBuffer sb2) sb1.append("ccc"); sb2=new StringBuffer("aaa");

调用method1前 String str1="aaa";String str2="bbb";

Java栈 main参数args main返回地址 main动态链 main静态链 main返回值 str1 str2 方法区 Class A 类型信息 aaa 常量池 (用于保存在编译期已确定的,已编译的class文件中的一份数据。 程序中有三个字符串常量aaa,bbb,ccc将被创建) bbb ccc 堆区

进入method1(传值调用) Java栈 方法区 main参数args main返回地址 Class A 类型信息 main动态链 aaa

str1 str2 method1参数str2 method1参数str1 method1返回地址 method1动态连 method1静态连 方法区 Class A 类型信息 aaa 常量池 bbb ccc 堆区

执行method1(传值调用) str1+="ccc";str2="aaa";

Java栈 main参数args main返回地址 main动态链 main静态链 main返回值 str1 str2 method1参数str2 method1参数str1 method1返回地址 method1动态连 method1静态连 方法区 Class A 类型信息 aaa 常量池 bbb ccc 堆区 aaaccc (在执行时确定)

执行method2前(引用调用) StringBuffer sb1=new StringBuffer("aaa"); StringBuffer sb2=new StringBuffer("bbb");

Java栈 main参数args main返回地址 main动态链 main静态链 main返回值 str1 str2 sb1 sb2 方法区 Class A 类型信息 aaa 常量池 bbb ccc 堆区 aaaccc aaa bbb

进入method2(引用调用) Java栈 方法区 Class A 类型信息 aaa 常量池 堆区 bbb aaaccc ccc aaa

main参数args main返回地址 main动态链 main静态链 main返回值 str1 str2 sb1 sb2 method2参数sb2 method2参数sb1 method2返回地址 method2动态链 method2静态链 方法区 Class A 类型信息 aaa 常量池 bbb ccc 堆区 aaaccc aaa bbb

执行method2(引用调用) sb1.append("ccc"); sb2=new StringBuffer("aaa");

Java栈 main参数args main返回地址 main动态链 main静态链 main返回值 str1 str2 sb1 sb2 method2参数sb2 method2参数sb1 method2返回地址 method2动态链 method2静态链 方法区 Class A 类型信息 aaa 常量池 bbb ccc 堆区 aaaccc bbb aaa

执行method2后(引用调用) Java栈 方法区 Class A 类型信息 aaa 常量池 堆区 bbb aaaccc ccc bbb

main参数args main返回地址 main动态链 main静态链 main返回值 str1 str2 sb1 sb2 方法区 Class A 类型信息 aaa 常量池 bbb ccc 堆区 aaaccc bbb aaa

欢迎大家提出质疑并交流。 谢谢!

ebnf描述c语言语句结构,EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则...相关推荐

  1. 听说go语言越来越火了?那么请收下这一份go语言书单吧!

    关注公众号[程序员书单]后回复"book"即可领取30+精品免费电子书 ​ Go 是一种简单.小巧.令人愉悦的语言.它也有一些犄角旮旯,但绝大部分是经过精心设计的.它的学习速度令人 ...

  2. web前端之dojo(用javascript语言实现的开源DHTML工具包)

    web前端之dojo(用javascript语言实现的开源DHTML工具包) 一.开始Dojo开发 1.Dojo Toolkit 简介 Dojo 于 2004 年创建,使开发 DHTML 和 Java ...

  3. 八、深入JavaScript的条件语句和循环语句(四)

    @Author:Runsen @Date:2020/5/26 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排 ...

  4. c语言的调试是对源文件进行,理解C语言——从小菜到大神的晋级之路(3)——C源程序的基本结构与调试方法...

    本期视频点击这里 在上一篇中,我们进行了Visual Studio 2013的安装以及第一个demo程序"HelloWorld"的建立.现在我们看一下其中的源代码及相关的C语言基础 ...

  5. CVPR2021 | 视觉推理解释框架VRX:用结构化视觉概念作为解释网络推理逻辑的「语言」

    本文提出了一个视觉推理解释框架 (VRX: Visual Reasoning eXplanation),将人们容易理解的.high-level 的结构化的视觉概念作为「语言」,通过回答为什么是 A,为 ...

  6. CVPR 2021 | 视觉推理解释框架VRX:用结构化视觉概念作为解释网络推理逻辑的「语言」...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者:葛云皓  |  编辑:Amusi 本文提出了一个视觉推理解释框架 (VRX: Visual Reaso ...

  7. C语言char*s 4,求讲解几道C语言的题 52 声明语句为“char s[4][15],*p1,**p2;int x,*y;”,下列语句中正...

    求讲解几道C语言的题 52 声明语句为"char s[4][15],*p1,**p2:int x,*y:",下列语句中正 2018-6-15来自ip:14.144.15.70的网友 ...

  8. R语言嵌套的ifelse语距:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用。If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块

    R语言嵌套的ifelse语句:将一条If语句放在另一条If语句中,该语句作为嵌套的If else调用.If else语句允许我们根据表达式结果(TRUE或FALSE)打印不同的语句,执行不同的语句块 ...

  9. R语言构建xgboost模型:模型的特性重要度计算及可视化、模型对应的结构树(文本文件)

    R语言构建xgboost模型:模型的特性重要度计算及可视化.模型对应的结构树(文本文件) 目录

最新文章

  1. memcache读书笔记(二)
  2. java用do while语句逆序输出_跟我学java编程—深入理解do-while循环语句的用法
  3. mysql+cur+0_MySQLcurdate()函数的实例详解
  4. unity声音组件AudioSource的使用
  5. html区域背景,保存/恢复HTML5 Canvas的背景区域
  6. 启发式算法、寻路算法A*算法
  7. 004-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-共享服务中心建设原则...
  8. STM32单片机和51单片机有何区别?
  9. android 源码导入android studio中(仿佛打开了新世界)
  10. [原创]K8_C段旁注查询工具5.0 30款国外主流CMS识别+智能识别未知CMS
  11. 2022-渗透测试-xss小游戏通关
  12. Chrome浏览器设置打开书签时在新标签页打开(保姆级图文)
  13. R语言Scheffe’s检验进行事后检验(post hoc)实战:单因素方差分析告诉我们并不是所有的群体手段的效果是均等的,确切地找出哪些组彼此不同使用Scheffe’s检验
  14. 我的一周re学习总结
  15. QOpenGLWidget空白不显示绘图内容
  16. 【AI白身境】计算机视觉都有哪些研究方向
  17. 1. Java之父是谁?java哪年推出的?
  18. 小学计算机课在玩中学,学中玩,玩中学的作文(共5篇)
  19. 顺利解决org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException!
  20. c++实现加法的w32控制台程序

热门文章

  1. 在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据
  2. 基于区域的CNN(R-CNN)
  3. Android线程池简单使用
  4. 2021年大数据Flink(十五):流批一体API Connectors ​​​​​​​Kafka
  5. git 下载的文件与git上面的文件不相同的处理方法
  6. vue缓存页面【二】
  7. 20175320 2018-2019-2 《Java程序设计》第2周学习总结
  8. 【js操作url参数】获取指定url参数值、取指定url参数并转为json对象
  9. bzoj 1211 [HNOI2004]树的计数
  10. 2021襄阳谷城高考成绩查询,2021高考襄阳谷城县考生求助电话