歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C注釋正則式及其效率思考

下面給出C注釋正則式與自動機相互轉換的例子。兩個例子都不考慮注釋標識符在字符串常量中的情形(如:const char* start = "/*", *end = "*/";)。

自動機轉換成正則式:

識別C注釋的自動機很容易畫出來(^/*表示除'/'及'*'以外的所有字符):

圖1

TMS_LI的正則為:/\*[^*]*\*(\*|[^/*][^*]*\*)*/

正則式轉換成自動機:

參考了一下Mastering Regular Expressions, 3rd Edition By Jeffrey E. F. Friedl,其中 6.7節有提到C注釋正則式匹配問題。沒有仔細看他的推導過程,反正蠻啰嗦。www.linuxidc.com 下面是Jeffrey 給的正則式:

/\*[^*]*\*+([^/*][^*]*\*+)*/

為驗證其正確性,必須正則式轉換成自動機。

圖2

顯然,這兩個自動機是等價的。這也驗證了這兩個正則式的正確性。

Copyright © Linux教程網 All Rights Reserved