ebnf描述c语言语句结构,EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则...
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语言里语句的结构;并用操作语义的方法描述对应的语义规则...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你是光你是电是哪首歌啊?
- 下一篇: nexus 4 linux,Nexus