您的位置:首页 > 其它

修改正则表达式部分语法,减少语法树叶子,提高识别效率

2006-10-07 18:27 477 查看
原来使用的语法

<re>    ::= <expr> { <expr> }
|  <re> '|' <re>
<expr>  ::= <term>
|  <term> '*'
<term>  ::= <label>
|  '(' <re> ')'
<label> ::= <symbol>
| '[' <range> { <range> } ']'
| '[' '^' <range> { <range> } ']'
<range> ::= <symbol>
| <symbol> '-' <symbol>

<symbol> ::= '.'
| 0 .. n (any element of alphabet)
| '/' <symbol>

根据原来使用的语法,一个symbol只能对应一个字符,得到的dfa每次只能处理一个字符。
如果改为

<symbol> ::= '.'
| <re_char> { <re_char> }
| '/' <symbol>

<re_char> ::= 0..n ( any element of alphabet )

这样可以把一个symbol对应到一个字符串。对于含有确定子串的正则表达式,可以大幅度减少语法树的叶子。
转换出来的dfa,含有更少的状态,还可以通过字符串而不是字符,达到批量处理。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: