指令碼解析器
命令指令碼解析器,自建立一種指令碼語法,解釋執行它。目前指令碼形式類似於命令,沒有變數型別的概念,關鍵字為=、$()、if、else、while、break、continue ,解釋與c語言一樣。
**上傳**:
型別:無型別,全為字串看待。
作用域:當前大括號中,以及所有子大括號中,退出當前大括號則清除變數。
獲得變數值:使用$(變數名)的形式獲取,如果指定不存在的變數則返回「「,否則返回實際的字串值。
變數賦值:使用「=「號,如變數1=aaa
判斷變數相當、大於、小於:使用命令判斷
真假判斷:字串為」」為假,其他情況為真。
一對大括號中的內容為乙個執行體,乙個執行體分為函式執行體和條件執行體。
函式執行體:大括號前面如果有function宣告的為函式執行體。其形式為:
function 函式名稱
執行體內容
條件執行體:除函式執行體外為條件執行體。執行體是否被執行有如下幾種情況:
a. 依賴於緊鄰上一行的命令返回值,如果為真則執行。
b. 如果緊鄰上一行有else宣告,則上乙個執行體不執行則判斷是否執行本塊(無判斷命令為真),上乙個執行則不執行本塊,忽略當前判斷命令。
c. 其他情況,則必須執行。
條件執行體執行後需要忽略後面所有的else執行體;
如果沒有執行,則需判斷後面的else執行體是否需要執行。
使用while宣告乙個迴圈體開始。while後可接命令,表示命令成功則執行,不成功則忽略本執行體。
退出迴圈的形式有如下幾種:
a. while 後的命令返回空
b. 在迴圈體內部執行break操作。
使用if 宣告乙個條件判斷,後需要接命令。當前命令執行成功則執行緊鄰的命令;如果執行失敗,則忽略緊鄰的執行塊,並迴圈匹配的else。
根據規則,目前需要的關鍵字如下:
=、$()、if、else、while、break、continue
=:賦值
$():取值
if:條件判斷
else :與if匹配
while: 迴圈體宣告
break:打斷迴圈
continue:繼續迴圈
當前命令執行為真,則進入緊鄰的執行體,否則跳轉到else。
else:前一段執行體如果執行為真,則忽略當前執行體。
break:跳出迴圈;
continue:跳出當前迴圈,繼續迴圈;
變數只分為全域性變數和區域性變數,分別在兩個列表中儲存。對於靜態變數,翻譯時之間加字首變成全域性變數,只是該變數只有在執行時遇到才將其放入全域性變數列表中。
區域性變數以棧式儲存。遇到左大括號放入標誌位v0,然後將將區域性變數放入。遇到右大括號,則按棧的方式是否變數,直到釋放到v0。如下圖:
執行到1時,取出標誌變數v0;
執行到2}時,取出v5、v4、v3和標誌變數v0。
執行到1}時,取出v2、v1和標誌變數v0。
變數首先在區域性變數列表中查詢,如果沒有查到,則在全域性變數中查詢。如果都沒找到,則增加乙個區域性變數,並置空值。
整體處理流程如下:
Lua解析器Read指令碼內容
你知道c語言是怎麼read一整個檔案嗎?如果你知道了,那麼請忽略本文,如果你不知道,你可以花五分鐘來閱讀本文。在我開始閱讀lua 之前,我好像從來沒有用c語言寫過一次性read整個檔案的字元的 以往都是一句句的讀取。以至於我對這樣的 失去了敏感性。在開始閱讀lua 的時候,花了兩個小時來尋找lua解...
使用解析器
使用解析器 使用解析器是非常簡單,可以使用它自己的詞法分析器,但是,用fsyacc.exe 產生的解析器總是要求詞法分析器。在這一小節,我們將討論如何使用自己的詞法分析器,以及與解析器聯合。警告記住f 編譯器不能直接使用.fsl 和 fsy 檔案,需要用fslex.exe 和 fsyacc.exe ...
網頁解析器
學習任務 1.認識網頁解析器 學習目標 知識目標 1.熟悉網頁解析器 能力目標 1.能夠自主編寫網頁解析器 獲取新url函式 獲取新的url def get new urls self,page url,soup 儲存url new urls set 獲取所有的url 獲取每乙個url new ur...