Lex Yacc(3) 第乙個yacc的例子

2021-08-30 06:04:19 字數 750 閱讀 1418

寫乙個什麼都不解析的例子:

//第一部分:定義段

%%//第二部分:規則段

mystatment:;%%

//第三部分:使用者子例程段

yacc的三部分與lex的三部分類似。

在第一部分的定義段,包括%括起來的的c**段、包括#include部分和變數定義;同時可能會有:%union,%start,%token,%type,%left,

%right和%nonassoc宣告。

在第二部分的規則段,由yacc語法規則和「{}」括起來的c**組成。

在第三部分的使用者子例程段,yacc將這部分內容完全拷貝到翻譯後的c檔案中。也就是說你可以在這裡定義自己的c函式然後在規則段中的c**中呼叫它。

yacc**寫好後,用下面的命令來翻譯並編譯

yacc -oyc01.c yc01.y

gcc -o yc01 yc01.c -ly

卻發現不能不能執行通過,這是因為解析所要用到的yylex函式,是在lex中定義的。

所以,yacc要正確執行,需要同lex結合起來。

在這裡需要說明的是:

lex處理的是詞法解析,也就是說它擅長的是解析滿足某一正規表示式的詞法;

而yacc處理的是語法解析,它解析各種詞法按照一定的語法規則組合而成的語句。

同時,yacc中的變數和堆疊能幫助我們順利地提取滿足詞法和語法的內容。

接下來的我們看看如何使得lex和yacc進行結合,並傳遞解析內容。

3 第乙個Python程式

無論讀者使用的是哪種作業系統,相信都已經安裝好了 python 環境,可以通過命令列視窗或者 python 自帶的 idle 成功啟動互動式直譯器 如圖 1 所示 圖 1 啟動 python 互動式直譯器 本節將帶領讀者正式編寫第乙個 python 輸出 hello world 在圖 1 中的提示符...

3 第乙個python程式

學習任何一門語言的第一步,首先要寫個 hello world 這算是程式設計師的乙個傳統。但在寫之前,還有注意幾個問題。首先,python是一門指令碼語言,而指令碼語言的特點就是 我們寫的 會先由直譯器進行編譯以後,再去執行。但是當我們的程式執行在作業系統之上時,系統並沒有那麼智慧型,能夠自動識別出...

python第乙個程式設計 第乙個 Python 程式

簡述 安裝完 python 後,windows 中 開始選單或安裝目錄下就會有 idle 開發 python 程式的基本 ide 整合開發環境 幫助手冊 模組文件等。linux 中 只需要在命令列中輸入 python 命令即可啟動互動式程式設計。互動式程式設計 互動式程式設計不需要建立指令碼檔案,是...