lex的使用
簡單的c語言詞法分析指令碼
ref
在電腦科學裡面,lex是乙個產生詞法分析器(lexical analyzer,「掃瞄器」(scanners)或者"lexers")的程式 lex常常與yacc 語法分析器產生程式(parser generator)一起使用。lex(最早是埃里克·施密特和邁克·萊斯克製作)是許多unix系統的標準詞法分析器(lexical analyzer)產生程式,而且這個工具所作的行為被詳列為posix標準的一部分。乙個典型的lex指令碼如下:lex讀進乙個代表詞法分析器規則的輸入字串流,然後輸出以c語言實做的詞法分析器原始碼。
雖然傳統上是商業軟體,但是有些根據原本at&t程式碼這些版本的lex可以以公開原始碼的形式獲得,並被視為某些系統的一部份,例如說opensolaris和貝爾實驗室九號計畫。另乙個有名的lex公開原始碼版本是flex,代表"快速的詞法分析器"(fast lexical analyzer)
%
chars [a-za-z\_\'\.\"]
numbers ([0
-9])
+ delim [
" "\n\t]
whitespace
+ words +%
%%%void
main()
intyywrap()
第乙個由%%
包括的部分為 指令碼的全域性宣告部分,用於宣告一些全域性的變數,.由於一次檢查匹配只對於乙個詞,所以這裡主要誰一些計數器的宣告.
匹配規則由兩個%
限定範圍.這裡乙個正規表示式對應乙個**塊.像這樣:
/*正則部分*/..
.
注意:程式的主函式yylex()
返回值是int
,所以建議返回乙個整型的token,再查表得到字串形式的token
這個部分控制主要函式的呼叫形式,以及一些i/o操作(如果必要)
一般對於乙個完整的檔案掃瞄,使用while(token=yylex())
迴圈.
這就是乙個完整的指令碼檔案(.l檔案)的基本結構.
一般的linux發行版都有預裝lex的乙個版本flex(?).如果沒有,使用下列指令安裝.
sudo
apt-get
install flex bison
轉到編寫好的.l檔案路徑,輸入指令將.l轉化為.yy.c檔案準備編譯
flex filename.l
再將生成的yy.c用cc編譯出.out.
cc lex.yy.c -lfl
得到解析器的.out檔案.再將待分析的.c檔案輸入.
a.out下面是乙個簡單的c語言詞法分析指令碼,主要功能有:
/*see
/*see */
/*issue:var覆蓋了所有的關鍵字*/
/*solved*/%%
auto
break
case
char
const
continue
default
dodouble
else
enum
extern
float
forgoto
ifinline
intlong
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
(\()
(\))
(\[)
(\])
(\-\>
)(\.)(
!)(~
)(\+\+
)(\-\-
)(\-
)(\*)(
&)(\/)(%
)(\+
)(\<\<
)(\>\>
)(\<
)(\<=
)(\>
)(\>=)(
==)(!=
)(\^
)(\|)(
&&)(\|\|
)(\?:)
(=)(\+=)
(\-=
)(\*=)
(\/=)(
%=)(\>\>=
)(\<\<=)(
&=)(\^=)
(\|=)(
,)(\\a)
(\\b)
(\\f)
(\\n)
(\\r)
(\\t)
(\\v)(;
)(:)
(\+|\-)?
([1-
9][0
-9]*
|0)(\+
|\-)?(
[1-9
][0-
9]*|
0)(\.[0-
9]+)
(')([a-z]|[a-z])(')(
")([\s\s]*)("
)(\/\/
)(\/\*)(
[\s\s]*)
(\*\/)(
([a-z]
|[a-z]
|_)(
[a-z]
|[a-z]|[
0-9]
|_)*)%
%static
char
*print_token
(int token)
;//printf("%-20s", token_strs[token]);
return token_strs[token];}
intmain
(int argc,
char
** ar**)
return0;
}
軟體人生 關於此次抄襲事件的乙個對話
以下是今天剛剛發生的對話,了解我的人都知道。我從不造假。乙個做技術的 13 59 14 近期非常火呀。青潤 14 00 26 沒有。我僅僅是被逼的。人家為了自己的利益,就汙衊我和廈大校長貪腐有關。所以拒絕接受 採訪。我假設不說話,不就等於預設了麼。乙個做技術的 14 02 08 如今的人呀。為了自己...
flex編寫的乙個相簿瀏覽
1 目錄樹 2 demo viewimage.mxml xmlns s library xmlns mx library minwidth 955 minheight 600 xmlns viewimage demo.viewimage.backgroundcolor 000000 count re...
乙個Flex做的登陸控制項
最近在學習flex,之前一直在忙,沒空整理一下,現在有空整理整理一下,之前用flex做了個簡單的登陸控制項。希望大家多點給點意見 frmlogin.mxml 1 23 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 event name logi...