編譯原理 yylex學習筆記

2021-07-11 22:58:34 字數 1031 閱讀 3890

yyleng

只要掃瞄程式匹配標記時,標記的文字就儲存在以空字元終止的字串yytext中,而且它的長度儲存在yyleng中,yyleng中的長度與由strlen(yytext)返回的值是相同的。

yyless()

從與規則相關的**中呼叫yyless(n),這條規則推回除標記開頭的幾個字元以外的所有字元。當決定標記之間邊界的規則不方便表示為正規表示式時,它是很有用的

例:\"[^"]\" 

else

}yyless()的另一用處是使用不同的其實狀態的規則從新處理標記:

sometoken

yylex()

由lex建立的掃瞄程式的入口點yylex()。呼叫yylex()啟動或者重新開始掃瞄。如果lex動作執行講數值傳遞給呼叫的程式return,那麼對yylex()的下次呼叫就從它的停止地方繼續。

yylex()中的使用者**

規則段中的所有**都被拷貝到yylex()。以空白開始的行被假定是使用者**。"%%"後的**直接放置在接近掃瞄程式的開始處,在第一條執行的語句之前。

yymore()

yytext

每當詞法分析程式匹配標記時,標記的文字就儲存在以空字元結尾的字串yytext中

每次匹配乙個新的標記時,就要替換yytext的內容,如果yytext的內容還要使用,通過strdup()或者自己申請記憶體來儲存字串拷貝,從而使字串的拷貝拷貝位於剛剛分配的記憶體中。

yywrap()

當詞法分析程式遇到檔案結尾時,它呼叫例程yywrap()來找出下一步要做什麼,如果返回0,掃瞄程式繼續掃瞄,如果返回1,掃瞄程式就返回報告檔案結尾需標記。

lex庫中yywrap()的標準版本總是返回1,如果yywrap()返回指示有更多的輸入0,那麼它首先需要調整指向新的檔案yyin,可能使用fopen()。

起始狀態

在定義段可以宣告起始狀態,也稱起始狀態條件或起始規則。起始狀態用於限制某些規則的範疇,或者改變詞法分析程式處理部分檔案的方式。

沒有起始狀態的那些規則能應用於任何狀態。

動作中的begin語句設定了當前的起始狀態。

編譯原理學習筆記 語法

高階程式語言可分為 1.強制性語言 2.作用時語言 3.基於規則的語言 4.物件導向的語言 程式語言主要由語法,語義,語用 語用 有關程式設計和語言成分的使用方法,它使語言的基本概念與外界的語言 如數學概念或計算機的物件和操作 聯絡起來。語法 語法是指這樣的一組規則,用它可以形成和產生乙個合式的程式...

編譯原理學習筆記(二)

1 字母表 字母表 符號 字母 數字 標點符號 例 二進位制字母表,ascii字元表 unicode字符集 2 字母表上的運算 1 字母表的乘積 sigma1 sigma2的乘積 sigma1 sigma2 例 2 字母表的冪運算 字母表的n次冪運算是常速為n的符號串構成的集合 sigma的0次冪 ...

編譯原理 筆記

第一講 編譯過過程概述 主要介紹了 1 什麼是編譯是編譯程式?2 編譯程式的作用 3 編譯過程 4 編譯程式的組成及各部分的作用。第二講 上下文無關文法和語言 主要介紹了 1 語法 語義等概念,2 回顧了關於程式語言定義,初等資料型別,資料結構,高階高階語言的一般特性,程式結構,語句與控制結構等內容...