解析器檔案 Interpreter File

2021-06-09 20:08:11 字數 1461 閱讀 4623

剛看了apue的關於解析器檔案的部分,感受頗多,記錄一下吧。

解析器檔案是一種文字檔案,檔案的第一行的形式:#!  pathname  [optional-argument]

其中pathname指的時解析器名稱,optional-argument是傳遞給解析器的引數。其實我們大家最熟悉的解析器檔案就是shell指令碼檔案,shell指令碼檔案第一行都是#! /bin/sh。

解析器檔案是一種文字檔案,而解析器是可執行的二進位制檔案。解析器是由解析器檔案的第一行指定的。

例如乙個displayargtab程式,用於顯示執行該程式時的參數列,**如下:

//name:displayargtab

int main(int argc, char *argv)

執行結果為:

argv[0]: /tmp/displayargtab

argv[1]: arg

argv[2]: /tmp/testinterpreter

argv[3]: myarg1

argv[4]: myarg2

由此可以得知核心在執行解析器檔案時,向解析器傳遞的引數依次是:

有些程式是用指令碼語言寫的,直譯器檔案可將這一事實隱藏起來,例如shell指令碼,awk指令碼。例如下面是一段awk指令碼,由awk程式進行解析。

#! /bin/awk -f

begin

上面#!後接的時該解析器檔案的解析器awk程式,和解析器的引數-f;下面的指令碼程式是按awk語法所寫的指令碼,功能是顯示傳遞給awk指令碼的引數。

測試結果如下:

//指令碼檔名為testawk

$ ./testawk arg1 arg2 arg3

argv[0] = awk

argv[1] = arg1

argv[2] = arg2

argv[3] = arg3

在執行檔案testawk時,要賦予x許可權。上述執行解析器檔案testawk的過程實際是這樣的:

當然上述執行過程可以直接呼叫解析器檔案的解析器來直接執行,如下:

$ awk -f testawk arg1 arg2 arg3

argv[0] = awk

argv[1] = arg1

argv[2] = arg2

argv[3] = arg3

這樣執行的效率肯定比直接執行指令碼的效率要高,因為省略了上述第乙個過程。

sep 29, 2012 pm 20:28 @lab

XML檔案解析器TXml

前幾天看了開源的xml檔案解析器tinyxml,它是怎麼實現解析的沒怎麼看懂,於是決定自己實現乙個,反正最近不忙。先命名為txml。現在完成了解析和查詢功能,全部 加起來不到1000行,將會繼續完善它。原始碼必共享 先簡單說一下我的思路 1 讀取xml檔案資訊,並存入乙個字元陣列中 2 遍歷陣列,將...

XML檔案解析器TXml

前幾天看了開源的xml檔案解析器tinyxml,它是怎麼實現解析的沒怎麼看懂,於是決定自己實現乙個,反正最近不忙。先命名為txml。現在完成了解析和查詢功能,全部 加起來不到1000行,將會繼續完善它。原始碼必共享 先簡單說一下我的思路 1 讀取xml檔案資訊,並存入乙個字元陣列中 2 遍歷陣列,將...

使用解析器

使用解析器 使用解析器是非常簡單,可以使用它自己的詞法分析器,但是,用fsyacc.exe 產生的解析器總是要求詞法分析器。在這一小節,我們將討論如何使用自己的詞法分析器,以及與解析器聯合。警告記住f 編譯器不能直接使用.fsl 和 fsy 檔案,需要用fslex.exe 和 fsyacc.exe ...