C注释正则式及其效率思考

下面给出C注释正则式与自动机相互转换的例子。两个例子都不考虑注释标识符在字符串常量中的情形(如:const char* start = "/*", *end = "*/";)。

自动机转换成正则式:

识别C注释的自动机很容易画出来(^/*表示除'/'及'*'以外的所有字符):

C注释正则式及其效率思考

图1

TMS_LI的正则为:/\*[^*]*\*(\*|[^/*][^*]*\*)*/

正则式转换成自动机:

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

为验证其正确性,必须正则式转换成自动机。

C注释正则式及其效率思考

图2

显然,这两个自动机是等价的。这也验证了这两个正则式的正确性。

相关推荐