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

Slides:



Advertisements
Similar presentations
软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
Advertisements

第4章 條件判斷與迴圈 Java 2 程式設計入門與應用.
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
中国古代诗歌散文欣赏 地点:福建福州 报告人:张华娟.
四資二甲 第三週作業 物件導向程式設計.
C#程序设计案例教程 第3章 程 序 结 构.
第4章 JavaScript脚本语言基础 4.1 JavaScript简介 4.2 JavaScript语法基础
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
第 5 章 流程控制 (一): 條件分支.
Oracle数据库 Oracle 子程序.
第二章 JAVA语言基础.
第三章 控制结构.
Ch07 PHP程式基礎 網頁程式設計.
程式設計實作.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
C#程序设计基础 $5 流程控制.
第二章 C# 基础知识.
例外處理(Exception Handling)
C++Primer 3rd edition 中文版 Chap 5
第一次随堂作业(10.16) 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
C++中switch语句的BNF 否极泰来 ——《周易》.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
流程控制結構 4-1 流程控制與UML活動圖 4-2 程式區塊與主控台基本輸入 4-3 條件控制敘述 4-4 迴圈控制敘述 4-5 巢狀迴圈
JAVA程序设计练习题 第6章.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
本單元介紹何謂變數,及說明變數的宣告方式。
程式設計實作.
第2章回顾 标识符:不用记,动手 关键字:if, else, switch, for, while, do, break, continue, void, …… 局部变量和成员变量 ①变量作用域 ②内存布局 基本数据类型 ①4类8种 ②互相转换 流程控制语句 ①分支 if……else, switch.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Java语言程序设计 第五部分 Java异常处理.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
辅导课程六.
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
C语言 程序设计基础与试验 刘新国、2012年秋.
第二章 Java语言基础.
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
Java程序设计 第2章 基本数据类型及操作.
C/C++/Java 哪些值不是头等程序对象
陳維魁 博士 儒林圖書公司 第五章 控制結構 陳維魁 博士 儒林圖書公司.
第三章 C# 基础知识.
第4章 PHP流程控制语句.
《JAVA程序设计》 语音答疑 辅导老师:高旻.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
第二章Java基本程序设计.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
第7章 异常处理.
第二章 Java基本语法 讲师:复凡.
第3章 JavaScript基本语句.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 Java语法基础.
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
Do While 迴圈 東海大學物理系‧資訊教育 施奇廷.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
迴圈(重複性結構) for while do while.
判斷(選擇性敘述) if if else else if 條件運算子.
C语言基本语句 判断循环.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
编译原理实践 6.程序设计语言PL/0.
第二章 Java基本语法 讲师:复凡.
Summary
Presentation transcript:

EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则 假定有语法类 <exp> 表示一般表达式,<s-exp> 表示可用于 switch 标号的静态表达式 查阅 javascript语言的规范,尽可能保证你的描述反映了javascript语言规范的要求 请说明javascript程序的哪些结构要求没有在你的描述中反映出来?如果有,请说明为什么无法描述。

语句 <statement> ::= block | <variable-statement> |<assignment-statement> |<labeled-statement> | <expression-statement> | <condition-statement> | <iteration-statement> | <jump-statement> |<with-statement> |<exception-statement> |<throw-statement> |<empty-statement>

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

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

9.跳转语句 jump-statement ::= 'continue '[';']' | 'break' [<identifier>][';'] | 'return' [<exp>][';'] 10.with语句 with-statement ::= with '('<exp>')' <statement> 11.异常语句 exception-statement ::= 'try' <block>'catch' '(' <identifier>')' <block>['finally'<block>] 12.throw语句 throw-statement::= 'throw'<exp>[;] 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

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