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 回顧了關於程式語言定義,初等資料型別,資料結構,高階高階語言的一般特性,程式結構,語句與控制結構等內容...