lex 的常規表示式
常規表示式是一種使用元語言的模式描述。表示式由符號組成。符號一般是字元和數字,但是 lex 中還有一些具有特殊含義的其他標記。 下面兩個**定義了 lex 中使用的一些標記並給出了幾個典型的例子。
用 lex 定義常規表示式
字元含義
a-z, 0-9, a-z構成了部分模式的字元和數字。
.匹配任意字元,除了 /n。
-用來指定範圍。例如:a-z 指從 a 到 z 之間的所有字元。
[ ]乙個字元集合。匹配括號內的 任意 字元。如果第乙個字元是^那麼它表示否定模式。例如: [abc] 匹配 a, b, 和 c中的任何乙個。
*匹配 0個或者多個上述的模式。
+匹配 1個或者多個上述模式。
?匹配 0個或1個上述模式。
$作為模式的最後乙個字元匹配一行的結尾。
指出乙個模式可能出現的次數。 例如: a 表示 a 可能出現1次或3次。
/用來轉義元字元。同樣用來覆蓋字元在此表中定義的特殊意義,只取字元的本意。
^否定。
|表示式間的邏輯或。
"《一些符號》"字元的字面含義。元字元具有。
/向前匹配。如果在匹配的模版中的「/」後跟有後續表示式,只匹配模版中「/」前 面的部分。如:如果輸入 a01,那麼在模版 a0/1 中的 a0 是匹配的。
( )將一系列常規表示式分組。
常規表示式舉例
常規表示式含義
joke[rs]
匹配 jokes 或 joker。
ashis+
匹配 aashis, ashis, aashi, ashi。
(a[b-e])+
匹配在 a 出現位置後跟隨的從 b 到 e 的所有字元中的 0 個或 1個。
lex 變數
yyin
file* 型別。 它指向 lexer 正在解析的當前檔案。
yyout
file* 型別。 它指向記錄 lexer 輸出的位置。 預設情況下,yyin 和 yyout 都指向標準輸入和輸出。
yytext
匹配模式的文字儲存在這一變數中(char*)。
yyleng
給出匹配模式的長度。
yylineno
提供當前的行數資訊。 (lexer不一定支援。)
name.y - 語法檔案
%typedef char* string;
#define yystype string
%}%token name eq age
%%file : record file
| record
;record : name eq age ;%%
int main()
int yyerror(char *msg)
name.lex - lex 的解析器檔案
%char [a-za-z]
num [0-9]
eq [=]
name +
age +%%
%%int yywrap()
指標內容補充
在前面總結引數傳遞的三種方式時,我們提到,在建立乙個指標之後,我們首先要給它乙個位址,即int p a 之後p本身的值所代表的就是它所指向內容的位址,而 p就是它所指向的內容的值。但之前我們討論的,都是指標指向乙個值的情況,例如指向乙個int型變數或者char型等等。但今天在複習深淺複製時,發現當我...
Linux學習筆記 補充內容
命令格式 find 目錄 條件 條件值1.find name find etc name passwd 查詢 etc下名字叫做passwd的檔案2.find user group a o not find mnt group root find mnt user westos find mnt gr...
Phthon十五 Python內容補充
1.特殊的方法舉例 init self,這個方法在新建物件恰好要被返回使用之前被呼叫。del self 恰好在物件要被刪除之前呼叫。str self 在我們對物件使用print語句或是使用str 的時候呼叫。lt self,other 當使用 小於 運算子 的時候呼叫。類似地,對於所有的運算子 等等...