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

原来使用的语法

<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,含有更少的状态,还可以通过字符串而不是字符,达到批量处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值