指令碼解析器

2021-07-11 15:54:26 字數 1795 閱讀 4646

指令碼解析器

命令指令碼解析器,自建立一種指令碼語法,解釋執行它。目前指令碼形式類似於命令,沒有變數型別的概念,關鍵字為=、$()、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...