2018-06-16 15:21 更新

 語法:

Block : { StatementListopt } StatementList : Statement StatementList Statement

 語義:

 產(chǎn)生式 Block : { } 按照下面的過程執(zhí)行 :

  1. 返回 (normal, empty, empty)。

 產(chǎn)生式 Block : { StatementList } 按照下面的過程執(zhí)行 :

  1. 返回解釋執(zhí)行 StatementList 的結(jié)果。

 產(chǎn)生式 StatementList :Statement 按照下面的過程執(zhí)行 :

  1. 令 s 為解釋執(zhí)行 Statement 的結(jié)果。
  2. 如果有一個(gè)異常被拋出,返回 (throw, V, empty),這里的 V 是異常。( 仿佛沒有拋出異常一樣繼續(xù)運(yùn)行。)
  3. 返回 s。

 產(chǎn)生式 StatementList :StatementList Statement 按照下面的過程執(zhí)行 :

  1. 令 sl 為解釋執(zhí)行 StatementList 的結(jié)果。
  2. 如果 sl 是個(gè)非常規(guī)完結(jié),返回 sl。
  3. 令 s 為解釋執(zhí)行 Statement 的結(jié)果。
  4. 如果有一個(gè)異常被拋出,返回 (throw, V, empty),這里的 V 是異常。 ( 仿佛沒有拋出異常一樣繼續(xù)運(yùn)行。)
  5. 如果 s.value 是 empty ,令 V = sl.value, 否則令 V = s.value。
  6. 返回 (s.type, V, s.target)。

 以上算法中步驟5和步驟6確保了StatementList的值是StatementList中最后一個(gè)產(chǎn)生值的Statement的值。例如以下eval函數(shù)的調(diào)用全都返回1

eval("1;;;;;") eval("1;{}") eval("1;var a;")


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號